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


40

私は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:~$

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


Linuxでは、アクションを実行する方法が複数あることがよくあります。良くも悪くも正しいか間違っているものはありません。個人的には、タイピングが最も少ないものを使用します。これらのコマンドの多くは、Ubuntuがsystemdに変更される際のsymリンクまたは後方互換性があります。
パンサー

systemctl推奨される構文でありservice、下位互換性として提供されます。/etc/init.d/pure-ftpdまたは同様のものは、開始/停止スクリプトを直接呼び出しています。
パンサー

回答:


57

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

  1. sudo service apache2 status

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


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


詳細な返信ありがとうございます。私も答えを探していますが、これは本当に私を混乱させたので、ここに投稿しました。また、(sudo systemctl status apache2.service)ではなく、sudo systemctl status apache2が機能することもわかります。.service部分の前に害はありますか?
ワカスタリク

@WaqasTariq問題ありません!どちらも機能し、systemctlサービスファイルが保存されているディレクトリを検索し、見つかった場合は「.service」を追加します。したがって、たとえば、書き込み後にタブを1回sudo systemctl status apache2押すと、追加.serviceすることで完了します。複数のapache2 systemctlファイルがある場合(.serviceおよびなど.target、利用可能なすべてのオプションを表示するには、タブを2回
押す

とった。あなたの答えと時間をありがとう。
ワカスタリク

@WaqasTariqようこそ!
-TopHat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.