すべてのサービス(/etc/init.dまたはupstartまたはsystemd)のリストを取得する方法を探しています。これらのサービスは、ブートを開始する(または開始された)はずです。
開始するすべてのサービスのリストを取得するにはどうすればよいですか? —その質問を知っています。service --status-all
を使用することをお勧めします。
しかし、それは私に、どのサービスがを実行するようにサポートされているかを示しませんすべてのinitスクリプトを「status
」引数で呼び出します。これは、実行中の可能性があるすべてのサービスのリストです。
しかし、ブート時に開始されたサービスがまだ実行中かどうかを知りたいです。
例…
Webfsがインストールされています。しかし、ブート時に実行されたくないです。したがって、私はそれを無効にしました:Sudo update-rc.d webfs disable
。また、sambaがインストールされており、ブート時に実行されるはずです。しかし、(何らかの理由で)停止します。 Sudo service --status-all
はここでは役に立ちません:
$ Sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
[ - ] samba
[ - ] webfs
両方ともオフですが、1つ(サンバ)がオンになっているはずです。
そう…
ブート時に開始するすべてのサービスのリストを取得するにはどうすればよいですか?そして、拡張機能として、「ステータス」を取得する簡単な方法はありますかこれらのサービスのうち(そうでない場合は、単にこのリストをループして、「service $ service status」などを実行します)。
ありがとう、アレクサンダー
2015-05-04の編集:Ubuntu 14.04を使用しています。
この質問の主な焦点は次のとおりです。
しかし、ブート時に開始されたサービスがまだ実行されているかどうかを知りたいです。
このため、initctl list
はあまり役に立ちません。 /etc/init.d
スクリプトによって開始されたサービス(/etc/init
のupstartスクリプトと比較して)は実際には考慮されません。
また、/etc/rc?.d/S*
のリストは役に立ちません。指定されたランレベルで開始されたサービスのリストを生成します。開始されるはずのサービスがまだ実行されている場合、それは表示されません。
基本的に、Solaris for Ubuntuのsvcs -x
のようなものを探しています。 svcs -x
を使用すると、開始されたサービスがもう実行されていない場合に出力されます。これは、Ubuntuにも必要です。
理由:私は、Icinga/Nagios監視システムの(多かれ少なかれ...)汎用チェックを行いたいと思っています。私たちは多くの異なる顧客のために多くの異なるサーバーを持っているので、「重要な」サービスのリストを定義するために実際にはスケーリングしません。
すべてのサービスは起動時に開始されます:
initctl list
システムに存在するすべてのサービスのリスト:
service --status-all
これが私のワンライナーgrep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-
です
grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'
を使用すると、少しきれいな出力を実現できます。
次に、詳細に入ります。アップスタートジョブはすべて/etc/init/
に保存されますよね?そこにあるジョブにはすべて、開始するランレベルを示す行があります。ランレベル2は通常のブート、デフォルトのランレベルです。したがって、runlevel
と言うすべての行をgrepし、grepの出力をawkで消去して、start on
およびrunlevel#2の行のみに一致させると、upstartジョブのリストが取得されます。残りはフォーマットのニーズに合わせて、ファイル名の/をスペースに置き換え、それらのファイルへのパスを切り取り、ファイル名自体を残します。
!/#/
の部分は、コメントアウトされた可能性のある開始ディレクティブに対処するためのもので、これは私が手動で追加したものです。
とりわけ、/etc/rc2.d
があります(正しく理解できれば)優先度の低いスクリプトがあります。
そのための粗いワンライナーは:ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}
実際にランレベル2で実行されるそのフォルダー内のスクリプトは、Sで始まり、その後に優先順位番号が付けられた名前が付けられます。さて、基本的に、Sで始まるすべてのファイルを取得し、それらを優先名のみでリストします(それをクリーンアップする方法を理解する必要があります)。
Muruがコメントで適切に指摘しているように、/etc/init/*.override
ファイルもあります。これは、「。。。構成ファイルを直接変更せずにジョブを実行する方法を変更します」( init manpage )
現在のところ、これらのファイルの経験はあまりないので、「grep 'manual' /etc/init/*.override」を使用して開始するように指示されたサービスを一覧表示することによってのみ、これらの.overrideファイルを調べることをお勧めしますinitctl
またはservices
コマンドを使用して手動で。
すべてのサービスとそれぞれのランレベルステータスを一覧表示します-chkconfigスタイル:
# sysv-rc-conf --list
acpid 2:on 3:on 4:on 5:on
Apache-htcac 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Apache2 0:off 1:off 2:on 3:on 4:on 5:on 6:off
リストされたすべてのインタラクティブなテキストベースの編集:
# sysv-rc-conf
l SysV Runlevel Config -: stop service =/+: start service h: help q: quit qk
x
x service 1 2 3 4 5 0 6 S
x ----------------------------------------------------------------------------
x acpid [ ] [X] [X] [X] [X] [ ] [ ] [ ]
x Apache-ht$ [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
x Apache2 [ ] [X] [X] [X] [X] [ ] [ ] [ ]
x
x Use the arrow keys or mouse to move around. ^n: next pg ^p: prev pg
x space: toggle service on / off
ない場合はインストールする必要があります:
apt install sysv-rc-conf