web-dev-qa-db-ja.com

systemdにSysV initスクリプトを使用できますか

Ubuntu 14にはSysV initスクリプト(/etc/init.d/)。

Ubuntu 16への移行後、Ubuntu 16がsystemdユニットファイルを即座に生成することを理解しているため、それらは実際には機能しません。一部のサービスは開始できますが、開始できないサービスもあります。

私の考えは:

  1. SysV initスクリプト(/etc/init.d/-> /var/lib/my-services/)そして、それらを介してサービスを開始できることを確認してください

  2. 適切なsystemdユニットファイル(/etc/systemd/system)および再配置されたSysV initスクリプト(/var/lib/my-services/

SysV初期化スクリプトを再利用できますか、またはSysVに対して機能しないsystemdの特定の仕様を含めることができますか?

PDATE#1: Ubuntu 16のそのままの状態でApache2はSysV initスクリプト(/etc/init.d/Apache2)。 Apache2のsystemdの例はありますか?

2
robert

systemdには下位互換性がありますが、1対1ではありません。たとえば、SysV initスクリプトではカスタムサブコマンドを追加できますが、systemdでは追加できません。

私の経験では、これらの古いinitスクリプトを機能させ続けようとすると、追加のデバッグや奇妙な動作が期待できます。

Initスクリプトをsystemdユニットファイルとして書き直すことで、長期的には時間を節約できると思います。

標準のサードパーティソフトウェアを使用している場合、プロジェクトには、使用できる独自のsystemdユニットファイルがすでに同梱されている可能性があります。

3
Mark Stosberg

sysV initスクリプトとのsystemdの互換性は、 systemd-sysv-generator によって提供されます。これは、実装する適切な引数を使用してinitスクリプトを呼び出すsystemdユニットをオンザフライで書き込みます開始/停止/リロード。

Systemd-sysv-generatorは、その仕事をするために、次のようなSysV initスクリプトの LSBヘッダー に大きく依存しています。

### BEGIN INIT INFO
# Provides: lsb-ourdb
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop OurDB
# Description: OurDB is a very fast and reliable database
#    engine used for illustrating init scripts
### END INIT INFO

SysV initスクリプトに適切なLSBヘッダーがない場合、systemd-sysv-generatorがそれをsystemdユニットに自動的に変換するという適切な作業を実行できない可能性があります...

Systemd-sysv-generatorによって生成されたユニットは/run/systemd/systemに保存されるため、そこで*.serviceファイルを検索するか、systemctl catコマンドを使用して、単位。 systemctl editコマンドを使用して、SysV initスクリプトから生成されたユニットにオーバーライドを追加することもできます。 (たとえば、ユニットに追加の依存関係または順序付けディレクティブを追加する場合に便利です。)

しかし、思い切ってSysV initスクリプトをネイティブのsystemdユニットに変換する方がより良いアプローチであり、特にコマンドがフォアグラウンドで実行でき(デーモン化ではなく)、SysV initスクリプトがコマンドをデーモン化している場合は、長期的に見返りが得られます自分自身(その場合、systemdはより良い仕事をすることができ、コマンド自体をデーモン化するとよりうまく機能します。)

SysV initスクリプトをsystemdユニットに変換するためのヒントについては、Fedora Magazineの この記事 を参照してください。 initスクリプトを変換しようとして困惑した場合は、詳細をここで確認してください。幸運を!

1
filbranden