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
最良の解決策は何ですか?
ロスタム・ママットはこの功績を認めています:
すべてのサービスを一覧表示すると、結果をgrepしてそこに何があるかを確認できます。例えば。:
# Restart Apache2 service, if it exists.
if service --status-all | grep -Fq 'Apache2'; then
Sudo service Apache2 restart
fi
他のすべてのサービスに「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 }' ) )
お役に立てれば幸いです。
#!/bin/sh
service=mysql
status=$(/etc/init.d/mysql status)
print "$status"
#echo $status > /var/log/mysql_status_log
ジョエルBの答えを基にして、ここでは関数として(少しの柔軟性が追加されています。パラメーターチェックが完全に欠如していることに注意してください。2つのパラメーターを渡さないと、これが壊れます):
#!/bin/sh
serviceCommand() {
if Sudo service --status-all | grep -Fq ${1}; then
Sudo service ${1} ${2}
fi
}
serviceCommand Apache2 status
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
を組み合わせて、システムのサービスの状態を判断できます。
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
サービスが存在する場合