web-dev-qa-db-ja.com

Ubuntuでは、すべての自動開始サービスのリストを表示するコマンドはありますか?

Ubuntuでは、

  1. すべての自動開始サービスのリストを表示するコマンドはありますか?
  2. 起動時にサービスが自動起動するかどうかを確認するコマンドはありますか?

私はグーグルとIRCをやった。答えが見つかりません。 Ubuntuにはそのようなコマンドが存在しないかもしれません。最初は、すべての自動起動サービスが/etc/rc2.d/の下にあると思っていましたが、それは間違っていました。いくつかは/etc/init/*.confでのみ設定されます。次に、chkconfigツール(手動でインストール)を試しましたが、常に機能しません。たとえば、/etc/init/mongodb.confから自動起動されるmongodbに対して誤った結果が返されます。

service --status-allおよびinitctl listは、自動開始ステータスではなく、サービスの現在のステータスのみを通知できます。 update-rc.dは、ステータスを表示する代わりに自動開始ステータスを変更するコマンドです。

私の質問に対する答えがない場合、私はなぜUbuntuで自動起動サービスをチェックすることがとても難しいのだろうと思っています。

22
SSS

Ubuntuは、従来のUpstartシステムの代わりにinitを使用します。 Upstartはinitよりも強力ですが、initよりも少し複雑です。

対照的に、新興企業はイベントベースです。 「イベント」は「起動中」のようなものにすることもできますし、「ネットワークがすぐに使用できるようになった」など、より具体的なものにすることもできます。どのスクリプトがどのイベントに依存するかを指定できます。イベントを待機していないものは、CPUが利用可能になるといつでも実行できます。

このイベントベースのシステムにはもう1つの利点があります。理論的には、システムが稼働した後でも使用できます。 Upstartは、サムドライブ(現在はudevとhalによって処理されている)などの外部デバイスを接続したり、特定の時間にプログラムを実行したり(現在はcronによって処理されている)などのタスクを引き継ぐ予定です。

あなたが今知っているように、デッドデーモン(起動時に実行されない)は生きている可能性があり、イベントのために起動します

Ubuntuには、Upstart用の/ etc/initと、古いSysVファイル用の/etc/init.dの両方があります。その中のいくつかのファイルは、まだ移行されていない通常のSysV Initスクリプトです。ただし、移行した一部のサービスは、/ etc/init.dから/ lib/init/upstart-jobへのリンクを維持しています。これらのいずれかを実行すると機能しますが、最初に警告が表示されます。

/etc/init.dを介してinitスクリプトを呼び出すのではなく、service(8)ユーティリティを使用します。 service mysql restart

起動しようとしているスクリプトはUpstartジョブに変換されているため、restart(8)ユーティリティを使用することもできます。 mysqlを再起動します。

Upstartマシンでは、initはupstartから取得されます。 Upstartのinitは、特定のランレベルのスクリプトを呼び出すマスターrcスクリプトを実行する代わりに、ジョブディレクトリからジョブを取得します。

これで、自動起動デーモンを一覧表示する簡単な方法がないことがわかりました。すべてのデーモンを一覧表示し、1つずつ確認する必要があります。デーモンはinitまたはupstartによって、あるいは後のイベントによっても開始できます。このリストを取得する最も簡単な方法は、シェルでこのコマンドを実行することです。

initctl show-config

出力は次のようになります。

...
hostname
  start on startup
udevtrigger
  start on ((startup and started udev) and not-container)
tty2
  start on (runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))
...

最初のもののようないくつかのアイテムはとてもシンプルです、hostnameは起動時に始まります。しかし、他のアイテムはもっと複雑に見えるかもしれません。 (しかし幸いなことに人間が読める:-))

11
Ehsan

実際、すべてのサービスは/etc/init.dにのみ存在します:

rc0.d contains the services which runs in runlevel 0
rc1.d contains the services which runs in runlevel 1
rc2.d contains the services which runs in runlevel 2
rc3.d contains the services which runs in runlevel 3
rc4.d contains the services which runs in runlevel 4
rc5.d contains the services which runs in runlevel 5
rc6.d contains the services which runs in runlevel 6

さらに、すべてのサービスはrc0.drc1.drc2.drc3.drc4.drc5.drc6.dの下にも存在しますが、 /etc/init.dへのシンボリックリンクのみ。

これはrc1.dディレクトリの内容です:

lrwxrwxrwx 1 root root  20 Aug 17 14:54 K15pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  22 Nov 28 18:47 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  20 Aug 17 14:54 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  23 Nov  7 15:24 K20openbsd-inetd -> ../init.d/openbsd-inetd
lrwxrwxrwx 1 root root  15 Aug 17 14:54 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root  27 Aug 17 14:54 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Apr 14  2012 README
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S70dns-clean -> ../init.d/dns-clean

ここでは、init.d(K15pulseaudio-> ../init.d/pulseaudio)へのシンボリックリンクを確認できます。

しかし、ここではすべてのサービスがinit.dにリンクされていますよね?ただし、すべてのサービスが開始されるわけではありません。理由は2つのスクリプトです。

最初のものは[〜#〜] s [〜#〜]スクリプト(S30killprocs)--->開始です

2つ目はkスクリプト(K15pulseaudio)---> killです

すべてのKスクリプトサービスはサービスを強制終了し、すべてのSスクリプトサービスはそのランレベルのサービスを開始します。

簡単に

ランレベル1でS70dns-clean -> ../init.d/dns-clean start dns-cleanサービス.

ランレベル1のK15pulseaudio -> ../init.d/pulseaudio kills pulseaudio service.

5
max

Ncursesプログラムであるsysv-rc-confをインストールして、rcレベルをグラフィカルに構成/表示できます。

2
dseira

すべての自動開始サービスのリストを表示するコマンドはありますか?

ここを見てください: pdate-rc-d-cheat-sheet

起動時にサービスが自動起動するかどうかを確認するコマンドはありますか?

なし、私は知っています(これは何も意味しません;)が、ここから読み始めることができます。 askubuntuフォーラム-サービスの依存関係

0
StefanKaerst