これに答えるには数年遅れるかもしれません..しかし、ここに私が見つけた簡単な解決策があります
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 return 0 for active else inactive.
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 は 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
サブプロセスの使用:
import subprocess
stat = subprocess.call(["systemctl", "is-active", "--quiet", "ssh"])
if(stat == 0): # if 0 (active), print "Active"
print("Active")
また、os.system の代わりに subprocess を使用する理由をよく説明するこの回答を見つけました
ここで少し話題から外れた答え (python3 用)。
python3 では、この目的で pystemd を使用できます。 dbus API を介して systemd と通信するため、単に systemctl
を実行するよりも優れています。 その出力を解析します。
P.S. os.system() を使用する代わりに subprocess モジュールを使用することをお勧めします。