如何通过Windows系统SQL Server查询Linux服务器的服务运行状态
通过Windows SQL作业查询Linux服务器服务状态
核心思路
要在Windows上的SQL Server作业中查询Linux服务状态,本质是让SQL作业远程执行Linux的服务查询命令,常用方式是通过SSH远程连接执行命令,以下是两种可行方案:
方案1:SQL作业添加PowerShell步骤
适用于Windows Server 2019/Windows 10及以上(默认预装OpenSSH客户端,旧版本需手动安装OpenSSH)
配置SSH免密登录
在Windows服务器生成SSH密钥对,将公钥上传至Linux服务器的~/.ssh/authorized_keys文件,确保SQL Server代理账户能无密码登录Linux。编写PowerShell脚本
在SQL作业中新建「PowerShell」类型步骤,脚本示例:
# 替换为实际参数 $linuxServer = "192.168.1.100" $linuxUser = "admin" $serviceName = "nginx" # 远程执行服务状态查询命令 $serviceStatus = ssh "$linuxUser@$linuxServer" "systemctl is-active $serviceName" # 输出结果到作业日志,也可写入SQL表 Write-Output "目标服务 [$serviceName] 状态:$serviceStatus" # 若要写入SQL表,可添加如下代码(需配置SQL权限) # Invoke-SqlCmd -ServerInstance "本地SQL实例" -Database "监控库" -Query "INSERT INTO ServiceStatus (ServerName, ServiceName, Status, CheckTime) VALUES ('$linuxServer', '$serviceName', '$serviceStatus', GETDATE())"
- 若Linux使用sysvinit而非systemd,将查询命令替换为:
service $serviceName status | grep "running",再解析输出结果。
方案2:启用xp_cmdshell执行SSH命令
适合习惯用T-SQL编写作业的场景,需先启用xp_cmdshell组件:
- 启用xp_cmdshell
执行以下T-SQL开启组件(需sysadmin权限):
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'xp_cmdshell', 1; RECONFIGURE;
- 编写T-SQL作业步骤
在SQL作业中新建「Transact-SQL脚本」步骤,代码示例:
DECLARE @linuxServer NVARCHAR(100) = '192.168.1.100'; DECLARE @linuxUser NVARCHAR(50) = 'admin'; DECLARE @serviceName NVARCHAR(100) = 'nginx'; DECLARE @cmd NVARCHAR(300); -- 拼接SSH远程命令 SET @cmd = 'ssh ' + @linuxUser + '@' + @linuxServer + ' "systemctl is-active ' + @serviceName + '"'; -- 执行命令并返回结果 EXEC xp_cmdshell @cmd;
- 同样需配置SSH免密登录,避免作业因等待密码输入失败。
- 可将xp_cmdshell的输出捕获后插入监控表,方便后续统计。
注意事项
- SQL Server代理账户需具备执行SSH命令的权限,以及访问Linux服务器的SSH权限。
- 优先使用
systemctl is-active命令,返回active代表服务运行,inactive代表停止,结果更易判断。
内容的提问来源于stack exchange,提问作者Dan Goodwin
相关产品推荐
相关产品推荐

