web-dev-qa-db-ja.com

systemctl init.dとサービスの違い

私はLinuxが初めてで、Amazon Lightsailインスタンス(Ubuntu 16.04 LTS)を使用して自分自身をテストしています。

私が出会った多くのガイドを調べてみると、サービスを開始/停止/再起動/リロード/ステータスチェックするためにさまざまなコマンドを使用している人々がいます。具体的にはこれら。

Sudo systemctl status Apache2.service
Sudo /bin/systemctl status Apache2.service
Sudo /etc/init.d/Apache2 status
Sudo service Apache2 status

上記のすべてのコマンドが機能します。

  1. あるコマンドを他のコマンドよりも優先すべきですか?
  2. はいの場合、なぜですか?
  3. 他に注意する必要があるコマンドはありますか?

Monitでinit.dを使用すると、ステータスオプションを使用するときに問題が発生しました(ステータスは、サービスが実際にオンラインだったときにオフラインになり、Monitによって再起動されます)。 Monitのコードをinid.dから/ bin/systemctlに変更して修正しました。

Init.dを使用すると、他の人が何が起こったのかに関する詳細な情報が得られるようです。他のコマンドのいずれかを使用する必要がある場合、何が行われたかに関する詳細情報を表示させることは可能ですか?

ubuntu@ip-172-26-12-245:~$ Sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ Sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ Sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ Sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$

この質問を読んで返信するために時間を割いてくれたすべての人に事前に感謝したいと思います。

35
Waqas Tariq

開始するには、SysVInitからSystemDに移行するまでの歴史と闘争があります。しかし、1つの答えですべてを解こうとするのではなく、履歴の詳細とトピックに関する特定の記事については、Googleベンチャーを参照してください。

http://www.tecmint.com/systemd-replaces-init-in-linux/

しかし、要約すると、それは遅くて困難な移行でした。一部のレガシー機能はそのまま維持されました(init.dなど)。サービスコントロールにsystemctlを使用するオプションがある場合は、それを使用することをお勧めします。 Linuxの予測可能な将来であり、最終的には古いSysVInitメソッドは完全に非推奨と見なされ、削除されます。

具体的にリストしたそれぞれをカバーするには:

  1. Sudo systemctl status Apache2.service

これは、サービスを処理する新しいSystemDアプローチです。 Linuxのアプリケーションは、他のシステムではなくsystemdメソッドを使用するように設計されています。

  1. Sudo /bin/systemctl status Apache2.service

これは前のコマンドと同じです。この場合の唯一の違いは、コマンドを見つけるためにシェルの$PATH環境変数に依存せず、コマンドへのパスを含めることでコマンドを明示的にリストすることです。

  1. Sudo /etc/init.d/Apache2 status

これは、サービスを呼び出す元のSysVInitメソッドです。 Initスクリプトはサービス用に作成され、このディレクトリに配置されます。このメソッドはまだ多くの人が使用していますが、serviceSysVInitのサービスを呼び出すこのメソッドに代わるコマンドでした。 SystemDを備えた新しいシステムには、このためのレガシー機能がいくつかありますが、ほとんどの新しいプログラムにはこれが含まれておらず、古いアプリケーションの初期化スクリプトがすべて動作するわけではありません。

  1. Sudo service Apache2 status

これは、サービスのSysVInitシステムで使用される主要なツールでした。場合によっては/etc/init.d/スクリプトにリンクしているだけですが、別の場合には他の場所に保存されているinitスクリプトにリンクしています。これは、サービス依存関係処理へのスムーズな移行を提供することを目的としていました。


最後に、コマンドからより多くの情報を取得する方法を知りたいということに言及します。一部の情報は他の情報よりも多くの情報を提供するためです。これはほとんどの場合、アプリケーションと、それらがinitまたはサービスファイルをどのように設計したかによって決まります。原則として、黙って完了した場合は成功しました。ただし、startstop、またはrestartを検証するには、statusサブコマンドを使用して、その動作を確認できます。古いinitスクリプトでstatusコマンドが間違っていると述べました。それはアプリケーション開発者が見なければならないバグです。ただし、initスクリプトはサービスを処理する非推奨の方法になっているため、initスクリプトオプションを完全に削除するまでバグを無視するだけです。 systemctl statusは常に正しく動作するはずです。そうでなければ、アプリケーション開発者にバグを記録する必要があります。

53
TopHat