Saya mungkin terlambat beberapa tahun untuk menjawab ini.. tetapi ini adalah solusi mudah yang saya temukan
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.
Cukup dengan menggunakan os.system(). Anda kemudian mendapatkan kode pengembalian eksekusi; 0 berarti berlari, 768 berhenti
>>> 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
Kode pengembalian adalah kode yang dikembalikan dari eksekusi. Dari layanan halaman manual:
EXIT CODESservice memanggil skrip init dan mengembalikan status yang dikembalikan olehnya.
Jadi terserah skrip init dieksekusi. Anda dapat dengan aman menyatakan bahwa kode pengembalian apa pun selain 0 berarti layanan tidak berjalan.
Anda juga dapat memeriksa apakah proses sedang berjalan menggunakan:
>>> os.system('ps aux | grep sshd | grep -v grep | wc -l')
2
>>> os.system('ps aux | grep sshd123 | grep -v grep | wc -l')
0
Menggunakan subproses :
import subprocess
stat = subprocess.call(["systemctl", "is-active", "--quiet", "ssh"])
if(stat == 0): # if 0 (active), print "Active"
print("Active")
Juga, saya menemukan jawaban ini yang menjelaskan dengan baik mengapa menggunakan subproses daripada os.system
Sedikit jawaban di luar topik di sini (untuk python3).
Di python3 Anda dapat menggunakan pystemd untuk tujuan ini. Itu berbicara dengan systemd melalui dbus API-nya, jadi lebih baik daripada hanya mengeksekusi systemctl
dan mem-parsing hasilnya.
P.S.Lebih baik menggunakan modul subproses daripada menggunakan os.system().