Ubuntu 14にはSysV
initスクリプト(/etc/init.d/
)。
Ubuntu 16への移行後、Ubuntu 16がsystemd
ユニットファイルを即座に生成することを理解しているため、それらは実際には機能しません。一部のサービスは開始できますが、開始できないサービスもあります。
私の考えは:
SysV
initスクリプト(/etc/init.d/
-> /var/lib/my-services/
)そして、それらを介してサービスを開始できることを確認してください
適切な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
の例はありますか?
systemdには下位互換性がありますが、1対1ではありません。たとえば、SysV initスクリプトではカスタムサブコマンドを追加できますが、systemdでは追加できません。
私の経験では、これらの古いinitスクリプトを機能させ続けようとすると、追加のデバッグや奇妙な動作が期待できます。
Initスクリプトをsystemdユニットファイルとして書き直すことで、長期的には時間を節約できると思います。
標準のサードパーティソフトウェアを使用している場合、プロジェクトには、使用できる独自のsystemdユニットファイルがすでに同梱されている可能性があります。
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スクリプトを変換しようとして困惑した場合は、詳細をここで確認してください。幸運を!