GNU/Linux >> Belajar Linux >  >> Linux

Kode python untuk memeriksa apakah layanan sedang berjalan atau tidak.?

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().


Linux
  1. [OpenStack-Devstack]:Kesalahan:Layanan n-net tidak berjalan saat menjalankan stack.sh

  2. Bagaimana Cara Memeriksa Kemajuan Running Cp?

  3. Cron Job Untuk Memeriksa Apakah Script Php Berjalan, Jika Tidak Maka Jalankan?

  1. Periksa layanan yang berjalan di Linux

  2. Layanan OS Linux 'sshd'

  3. Layanan MongoDB tidak berjalan di Fedora

  1. Mengonversi kode Python 2 Anda ke Python 3

  2. Periksa Apakah Proses Menjalankan Mac Os X Kemudian Jalankan Kode?

  3. CronJob tidak berjalan