web-dev-qa-db-ja.com

bashにサービスが存在するかどうかを確認します(CentOSおよびUbuntu)

bashでサービスがインストールされているかどうかを確認する最良の方法は何ですか? Red Hat(CentOS)とUbuntuの両方で動作するはずですか?

考え:

service="mysqld"
if [ -f "/etc/init.d/$service" ]; then
    # mysqld service exists
fi

serviceコマンドを使用して戻りコードを確認することもできます。

service mysqld status
if [ $? = 0 ]; then
    # mysqld service exists
fi

最良の解決策は何ですか?

20
Justin

ロスタム・ママットはこの功績を認めています:

すべてのサービスを一覧表示すると、結果をgrepしてそこに何があるかを確認できます。例えば。:

# Restart Apache2 service, if it exists.    
if service --status-all | grep -Fq 'Apache2'; then    
  Sudo service Apache2 restart    
fi
13
Joel B

他のすべてのサービスに「ping」せずに1つのサービスのステータスを取得するには、次のコマンドを使用できます。

systemctl list-units --full -all | grep -Fq "$SERVICENAME.service"

ちなみに、これはbash(自動)補完で使用されるものです(ファイル/ usr/share/bash-completion/bash_completionで、_servicesを探してください)。

COMPREPLY+=( $( systemctl list-units --full --all 2>/dev/null | \
   awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' ) )

お役に立てれば幸いです。

5
jehon
#!/bin/sh

service=mysql
status=$(/etc/init.d/mysql status)
print "$status"
#echo $status > /var/log/mysql_status_log
2
santhosh kumar

ジョエルBの答えを基にして、ここでは関数として(少しの柔軟性が追加されています。パラメーターチェックが完全に欠如していることに注意してください。2つのパラメーターを渡さないと、これが壊れます):

#!/bin/sh

serviceCommand() {
  if Sudo service --status-all | grep -Fq ${1}; then
    Sudo service ${1} ${2}
  fi
}

serviceCommand Apache2 status
2
Cody S

Systemdのmanページを読んだ後...

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

...およびsystemd.services(5)....

...そして素敵な小さな記事...

https://www.linux.com/learn/understanding-and-using-systemd

これが答えになると思います。

systemctl list-unit-files -type service

Awk {'print $ 1'}にパイプして、サービスユニットのリストを取得します。

再度awkにパイプして、サービス名のみを取得します。 -Fを使用して、フィールドセパレータをピリオドに変更します。

awk -F。印刷{'print $ 1'}

基本ソリューションのバリエーションと拡張により、forループとsystemctl is-active $serviceを組み合わせて、システムのサービスの状態を判断できます。

1
var=$(service --status-all | grep -w "$Service")
if [ "output" != "" ]; then
    #executes if service exists
else
    #executes if service does not exist
fi

$ Serviceは、存在するかどうかを知りたいサービスの名前です。 varには次のようなものが含まれます

[+]    Apache2

サービスが存在する場合

0
Luc Vogelsangs