如何使用 python 检查其他服务器上的服务 运行
how to check service running on other server with python
我在其他 windows 或 Linux 服务器上检查我的服务时遇到问题。
我的问题是我必须从一台服务器向其他服务器发出请求,并检查这些服务器的重要服务是活动的还是禁用的。
我编写了 Python 代码来检查服务,它只适用于本地系统。
import psutil
def getService(name):
service = None
try:
service = psutil.win_service_get(name)
service = service.as_dict()
except Exception as ex:
print(str(ex))
return service
service = getService('LanmanServer')
if service:
print("service found")
else:
print("service not found")
if service and service['status'] == 'running':
print("service is running")
else:
print("service is not running")
这段代码有这个功能吗?
或推荐其他代码ß
我已经查看了一些建议,例如使用服务器代理(influx,...),但这些建议无法满足我的需要。
据我所知,psutil
只能用于收集本地进程的信息,不适合检索其他主机上的进程运行的信息。如果你想检查一个进程是否在另一台主机上 运行 ,有很多方法可以解决这个问题,解决方案取决于你想深入(或需要深入)的深度,以及你的当地情况是。以下是我的一些想法:
如果您只处理具有公开端口的网络服务:
一个非常简单的解决方案是使用脚本和端口扫描器 (nmap);如果服务正在监听的端口是打开的,那么我们可以假设该服务是 运行。 运行 脚本每隔一段时间检查一次服务,然后做你的事。
如果您想留在 Python,您可以通过使用 Python 的 socket
模块尝试连接到给定主机和端口以确定服务正在侦听的端口是否打开。
一个 Python 用于监控其他主机上网络服务的包或工具可能已经存在。
如果您需要更多信息并需要更深入,或者您想要检查本地服务,您的解决方案将必须涉及每个主机上的本地监控进程,并连接到该进程以收集信息。
- 您可以使用您的代码实现一个允许客户端连接到它的服务器,以检查该主机上的服务 运行。 (查看
socket
模块的官方文档以获取有关如何实现客户端和服务器的示例。)
但重要的是。根据您的问题和提问方式,我认为您还没有经验或洞察力以安全的方式实施此问题。如果您将其用于简单的 hobby/student 项目,请推出您自己的解决方案并学习。否则,我建议您检查现有的解决方案,例如 Nagios,并严格遵守安全建议。
您可以使用以下代码为您的服务。我认为这些代码会对你有所帮助
在你的问题中。
ip = your_ip
server_user = your_serviceuser
server_pass = your_pass
command = f"net use \\{ip} {server_pass} /USER:{server_user}"
os.system(command)
command = f"SC \\{ip} query SQLSERVERAGENT"
process = subprocess.Popen(command, stdout=subprocess.PIPE)
output, err = process.communicate()
output = str(str(str(str(output)[2:-1].replace(' ', '')).replace('\t', '')).replace('\r', '')).split('\n')
if output[3] != 'STATE:4RUNNING':
print("service is running...")
我在其他 windows 或 Linux 服务器上检查我的服务时遇到问题。
我的问题是我必须从一台服务器向其他服务器发出请求,并检查这些服务器的重要服务是活动的还是禁用的。
我编写了 Python 代码来检查服务,它只适用于本地系统。
import psutil
def getService(name):
service = None
try:
service = psutil.win_service_get(name)
service = service.as_dict()
except Exception as ex:
print(str(ex))
return service
service = getService('LanmanServer')
if service:
print("service found")
else:
print("service not found")
if service and service['status'] == 'running':
print("service is running")
else:
print("service is not running")
这段代码有这个功能吗? 或推荐其他代码ß
我已经查看了一些建议,例如使用服务器代理(influx,...),但这些建议无法满足我的需要。
据我所知,psutil
只能用于收集本地进程的信息,不适合检索其他主机上的进程运行的信息。如果你想检查一个进程是否在另一台主机上 运行 ,有很多方法可以解决这个问题,解决方案取决于你想深入(或需要深入)的深度,以及你的当地情况是。以下是我的一些想法:
如果您只处理具有公开端口的网络服务:
一个非常简单的解决方案是使用脚本和端口扫描器 (nmap);如果服务正在监听的端口是打开的,那么我们可以假设该服务是 运行。 运行 脚本每隔一段时间检查一次服务,然后做你的事。
如果您想留在 Python,您可以通过使用 Python 的
socket
模块尝试连接到给定主机和端口以确定服务正在侦听的端口是否打开。一个 Python 用于监控其他主机上网络服务的包或工具可能已经存在。
如果您需要更多信息并需要更深入,或者您想要检查本地服务,您的解决方案将必须涉及每个主机上的本地监控进程,并连接到该进程以收集信息。
- 您可以使用您的代码实现一个允许客户端连接到它的服务器,以检查该主机上的服务 运行。 (查看
socket
模块的官方文档以获取有关如何实现客户端和服务器的示例。)
但重要的是。根据您的问题和提问方式,我认为您还没有经验或洞察力以安全的方式实施此问题。如果您将其用于简单的 hobby/student 项目,请推出您自己的解决方案并学习。否则,我建议您检查现有的解决方案,例如 Nagios,并严格遵守安全建议。
您可以使用以下代码为您的服务。我认为这些代码会对你有所帮助 在你的问题中。
ip = your_ip
server_user = your_serviceuser
server_pass = your_pass
command = f"net use \\{ip} {server_pass} /USER:{server_user}"
os.system(command)
command = f"SC \\{ip} query SQLSERVERAGENT"
process = subprocess.Popen(command, stdout=subprocess.PIPE)
output, err = process.communicate()
output = str(str(str(str(output)[2:-1].replace(' ', '')).replace('\t', '')).replace('\r', '')).split('\n')
if output[3] != 'STATE:4RUNNING':
print("service is running...")