用于检查服务是否正在运行的Python代码。

问题描述:

我正在使用python2.7来检查服务是否正在运行。我已经提出了自己的服务,并将其放置在/etc/init.d之内。我有一个我正在使用它的树莓。用于检查服务是否正在运行的Python代码。

我们通常需要检查服务的状态,我们可以这样做:

service my_service status 

但我怎么能得到的服务从Python代码的状态。

谢谢

只需使用os.system()。然后你得到执行的返回代码; 方式运行,停止

>>> import os 
>>> stat = os.system('service sshd status') 
Redirecting to /bin/systemctl status sshd.service 
● sshd.service - OpenSSH server daemon 
    Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) 
    Active: active (running) since Thu 2017-10-05 09:35:14 IDT; 29s ago 
    Docs: man:sshd(8) 
      man:sshd_config(5) 
    Process: 620 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS) 
Main PID: 634 (sshd) 
    CGroup: /system.slice/sshd.service 
      └─634 /usr/sbin/sshd 
>>> stat 
0 <-- means service is running 

>>> os.system('service sshd stop') 
Redirecting to /bin/systemctl stop sshd.service 
0 <-- command succeeded 

>>> os.system('service sshd status') 
Redirecting to /bin/systemctl status sshd.service 
● sshd.service - OpenSSH server daemon 
    Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) 
    Active: inactive (dead) since Thu 2017-10-05 09:41:58 IDT; 10s ago 
    Docs: man:sshd(8) 
... 
768 <-- service not running 

返回代码是从执行一个返回。从service手册页:

退出代码 服务调用init脚本,并返回由它返回的状态。

所以这取决于执行的init脚本。您可以放心地说除0之外的任何返回码都表示服务未运行。

您可以检查如果进程正在使用运行,而不是

>>> os.system('ps aux | grep sshd | grep -v grep | wc -l') 
2 
>>> os.system('ps aux | grep sshd123 | grep -v grep | wc -l') 
0 
+0

你几乎* *那里工作。您需要获取代码中的状态,而不是只显示给用户。 –

+0

嗨,我做了你所说的。但是我输出的是'768'。 –

+0

'768'意味着服务未运行 – Vinny

你需要做的第一件事就是确定你的意思运行:

  • systemd给你一个ok状态
  • 进程正在运行/显示在PS
  • 事情实际上工作,即可以得到网页或ssh进入箱本地主机上

然后写的东西瓶坯测试或找到一个工具,你