web-dev-qa-db-ja.com

「サービス」と「/etc/init.d/」の違いは何ですか?

私はしばらくの間、Ubuntuフレーバーのオンとオフの両方でサーバーのインストールを管理してきました。サーバーを再起動するために/etc/init.d/にかなり慣れてきました。今、私はこのメッセージを受け取ります:

root@tatooine:~# /etc/init.d/mysql status
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql status

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the status(8) utility, e.g. status mysql
mysql start/running, process 14048

これはUbuntuの最新のLTSでもたらされたようです-なぜですか? /etc/init.d/の何が悪いのか、service/etc/init.d/の違いは何ですか?

113
Marco Ceppi

/etc/init.dスクリプトは、物事を行う古い方法です。それらはSystem V標準に由来します。ただし、これらのスクリプトは特定の順序でのみ起動されるため、実際の依存関係を確立することはできません。

したがって、すべての/etc/init.dスクリプトを(/etc/init内の)upstartスクリプトに置き換えることを目的として、upstartが開発されました。

serviceは、/etc/init.dスクリプトからupstartスクリプトへのスムーズな移行を可能にします。将来、ますます多くのスクリプトがupstartに転送されても、サービスは両方の可能性を見つけるため、引き続き機能します。

103
txwikinger

サービスコマンドのman serviceのマニュアルページも確認してください。

serviceは、予測可能な環境でスクリプトを実行します(作業ディレクトリは/で、LANGとTERMの2つの環境変数のみが設定されます)。また、--full-restartを実行する機能も追加されます。まとめると:

  1. serviceは、/ etc/initまたは/etc/init.d(upstartまたはSystem V)からスクリプトを実行できます
  2. serviceは、予測可能な環境でスクリプトを実行します。

「予測可能な環境」の側面は、何らかの理由でスクリプトが環境変数に依存している場合に問題を引き起こす可能性があります。おそらくそれを回避する方法がありますが、私はそれが何であるか分かりません、そしてそれはこの質問の範囲を超えています:)

28
Joe Marty