実行中のサービスを1つだけ確認するための推奨方法は何ですか?

実行中のサービスを1つだけ確認するための推奨方法は何ですか?

mongodサーバーが実行されていることを確認し、そうでない場合は起動するためのシェルスクリプトを作成しています。これを達成するには、次のコマンドを使用します。

systemctl is-active --quiet mongod

これにより、期待どおりに操作が実行されます。しかし、私のスクリプトはおそらくsystemdなしでシステム上で実行されるでしょう。

答え1

これは完璧ではありませんが、多くのシステムで動作します。名前が若干異なる場合があるか、渡す名前が別の名前のサブストリングである可能性があるため、このpgrepアプローチは最適ではありませんが開始にすぎません。

#!/usr/bin/sh

if systemctl is-active --quiet "$1"  > /dev/null 2>&1; then
  echo "Running! (systemctl)"
elif service "$1" status  2>&1 | grep -Eq 'is running|: active (running)'; then
  echo "Running! (service)"
elif pgrep "$1" > /dev/null 2>&1 ; then
  echo "Running (pgrep)"
else
  echo "Not running"
fi

別の名前で保存しcheckIfRunningて、次のように実行してください。

checkIfRunning mongod

答え2

これを達成するための移植可能な方法はありません。ただし、現在多くのLinuxディストリビューションには、システムサポートオペレーティングシステムserviceで実行されている場合にプロキシとして機能する古いレガシーコマンドがあります。systemctl

したがって、次のようにコマンドを実行できます。

# 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 Wed 2019-02-20 12:16:17 UTC; 1 weeks 2 days ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 3388 (sshd)
   CGroup: /system.slice/sshd.service
           └─3388 /usr/sbin/sshd -D

関連情報