GNU/Linux >> Linux の 問題 >  >> Linux

サービスが実行されているかどうかを確認する Python コード。

これに答えるには数年遅れるかもしれません..しかし、ここに私が見つけた簡単な解決策があります

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 モジュールを使用することをお勧めします。


Linux
  1. Python2コードをPython3に変換する

  2. プロセスがMacOsXを実行しているかどうかを確認してから、コードを実行しますか?

  3. Suの実行時に.bash_profileがソースされませんか?

  1. Cpの実行の進行状況を確認する方法は?

  2. Linuxで実行中のサービスを確認する

  3. Linux OS サービス「sshd」

  1. systemctl:コマンドが見つかりません

  2. サービス:コマンドが見つかりません

  3. chkconfig:コマンドが見つかりません