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

时间:2017-10-05 06:29:38

标签: linux python-2.7

我正在使用python2.7来检查服务是否正在运行。我已经自己做了服务并把它放在/etc/init.d里面。我有一个覆盆子,我正在使用它。

现在要正常检查服务状态,我们可以这样做:

service my_service status

但是如何从python代码中获取服务状态。

由于

6 个答案:

答案 0 :(得分:6)

只需使用os.system()即可。然后,您将获得执行的返回码; 0 表示正在运行, 768 已停止

>>> 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 联机帮助页:

  

退出代码          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

答案 1 :(得分:1)

我可能要几年后才能回答这个问题..但这是我找到的一个简单解决方案

import os  # I think it's better to use subprocess for this. but quick code for example

status = os.system('systemctl is-active --quiet service-name')
print(status)  # will print either 'active' or 'inactive'

答案 2 :(得分:1)

使用子进程:

import subprocess

stat = subprocess.call(["systemctl", "is-active", "--quiet", "ssh"])
if(stat == 0):  # if 0 (active), print "Active"
    print("Active")

另外,我发现 this answer 很好地解释了为什么使用 subprocess 而不是 os.system

答案 3 :(得分:0)

这里有点题外话(对于python3)。

在python3中,您可以为此使用enter image description here。它通过dbus API与systemd进行通讯,因此它比仅执行systemctl并解析其输出要好。

P.S。 最好使用pystemd模块,而不要使用os.system()。

答案 4 :(得分:0)

您可以看到我的代码以供参考:

p->pt = this->pt;

答案 5 :(得分:-3)

您需要做的第一件事是通过运行来定义您的意思:

  • systemd为您提供了一个好的状态
  • 进程正在运行/显示在PS
  • 事情确实有效,即可以在本地主机上获取网页或ssh到框中

然后写下预先测试的内容或找到适合你的工具