「/etc/init.d」と「/ lib / systemd / system」内のサービスについて混乱しています


15

私はLinuxの世界ではまったく新しいので、間違ったことを言ってすみません。

Debian 8.5マシンでMongo DBを実行しようとしています。パッケージ(percona.comから事前にビルドされた)をインストールしたとき、次のファイルに気付きました。

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

/etc/init.d/mongodについて

私はこれがupdate-rc.dブート/他の特定のシステム状態で(を介して登録されている限り)呼び出されることを理解しています(これについて技術的になりたくない、私は多くの情報を吸収していますが、これはそれほど重要ではないようです)。

これは私にはまったく問題ありません。スクリプトは多くの初期化を行い、最終的にmongoデーモンを起動します。起動、停止、再起動などの「トリガー」があるようで、私が理解している限り、これらをトリガーできsudo service mongod <action>ます。

/lib/systemd/system/mongod.serviceについて

このファイルは同じことを行うように見えます(つまり、mongoを実行します)が、構成が少なく、ExecStartパラメーターの1行だけです。

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

私の知る限り、これはでトリガーできますsudo systemctl start mongod

  • これが起動時に呼び出されるかどうかはわかりません。

  • なぜこれらの「サービス」ファイルが2つ必要なのか、また1つ(おそらく/ lib / systemdの方がはるかに簡単なので)を削除する方法を理解できません。

  • 2つの間に関係があるかどうかはわかりません。

  • 私はそれsystemctlinit.dスクリプトでも機能することを読んだことがありますが、この場合、2つのファイルのどちらがによってトリガーされるのかわかりませんsystemctl mongod start

いくつかの冗長性があると思うので、2つの方法のいずれかを選択する必要があります。そして、私はそれがであることを確認したい

  • 起動時に呼び出されます
  • コマンドで呼び出し可能(serviceまたはなどsystemctl)。

私の心をきれいにするのを手伝ってもらえますか?いくつかのコメントの助けを借りて、おそらく質問に焦点を絞り、絞り込むことができます。

回答:


12

init.dスクリプトと.service同じ名前のsystemd ファイルの両方がある場合、systemdはすべての操作にサービスファイルを使用します。serviceコマンドはsystemdにリダイレクトするだけだと思います。init.dスクリプトは無視されます。

を使用しsystemdます。これはDebian 8で新しく追加されましたが、デフォルトです。Systemdサービスファイルは、init.dスクリプトよりもシンプルに見えるはずです。systemdサービスでサポートされていない特定の機能については言及していません。

サービスファイルが含まれていなかった場合はsystemd、init.dスクリプトを喜んで使用します。そのため、mongodパッケージ開発者は、このsystemdの定義の方が優れていると彼らに言っています:)。

の出力を見てくださいsystemctl status mongod。サービスが起動時に開始できるようになっている場合、Loaded:行には「有効」と表示されます。それ以外の場合は、を使用できますsystemctl enable mongod。オプションを含めることもできます--now。これは同時にmongodを起動します。


ありがとうございました!私はsystemdを勉強し、最終的にそれを使用します。今のところ、私はそれを無効にして、最後に作業していたinit.dスクリプトを実行したかったのです。私が行った:systemctl disable mongod; その後、mongod.serviceの名前をmongod-backup.serviceに変更しました。その後systemctl daemon-reload。これは正しいと思いますか?/ lib / systemd / system /内のファイルを変更しないでくださいと読みましたが、名前を変更せずに、systemctlはinit.dスクリプトを無視し続けました。
ナタリオ

/ lib / systemd内のファイルはconffilesではありません。debianパッケージをインストールしてそのファイルを変更すること(および後でパッケージを更新すること)はお勧めできません。代わりに、「作業中」のinit.dスクリプトの名前を変更する必要があります(おそらく変更しますか?)。init.dスクリプトはconffileである傾向があります。更新によってconffileが変更された場合(理由はないはずです)、最初に警告が表示されます。この場合、元の(事実上)削除されたinit.dスクリプトの更新バージョンが利用可能になった場合に通知することを期待します。
sourcejedi

に依存するサービスに、新しいサービスの順序の依存関係を追加する必要がある可能性がありますmongod。また、いくつかの厳密な依存関係を削除しなければならない可能性もありますが、私はそうは思いませんでした。影響を受けるサービスを変更する安全な方法は、それらをコピーしてコピー/etc/systemd/system/を変更することです。
sourcejedi

一般的に、systemdに固執する方が簡単だと思います。現在、bash、init-functions、および systemdの後方互換機能について学習しています。純粋なSysV initシステムを学んでいないので、そのようなシステムを使用したことがある場合、実際にsystemdからもたらされる機能を期待するリスクがあります。
sourcejedi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.