web-dev-qa-db-ja.com

システムがBASHでsystemdまたはsysvinitを使用しているかどうかを確認する便利な方法?

さまざまなディストリビューションで使用したい共通のbashファイルを定義しています。システムがsystemdまたはsysvinit(/etc/init.d/)を使用しているかどうかを確認する方法が必要です。これが必要なので、適切なコマンドを実行してサービスを開始します。これを確認する安全な方法は何ですか?私は現在、systemctlコマンドの存在を確認していますが、systemctlコマンドが使用できる場合があるので、それは本当にオプションですか?しかし、systemdが実際に使用されているとは限りませんか?

以下は、現在のbashスクリプトからの抜粋です。

#!/bin/sh
if [ command -v systemctl >/dev/null ]
then
    systemctl service start
else
    /etc/init.d/service start
fi
52
phoops

Systemdとinitにはpid = 1

pidof /sbin/init && echo "sysvinit" || echo "other"

Systemdを確認する

pidof systemd && echo "systemd" || echo "other"

enter image description here

49
user55518