
Ubuntu 14には複数のSysV
初期化スクリプト(/etc/init.d/
)があります。
systemd
ユニットファイルを動的に生成するUbuntu 16に移行した後は、実際には機能しませんでした。一部のサービスは開始でき、一部のサービスは開始できません。
私の意見は次のとおりです。
SysV
初期化スクリプト(/etc/init.d/
- > )を再配置/var/lib/my-services/
し、スクリプトを介してサービスを開始できることを確認してください。適切な
systemd
ユニットファイルの生成(/etc/systemd/system
)と再配置されたSysV
初期化スクリプトの使用(/var/lib/my-services/
)
SysV
initスクリプトを再利用できますか?またはSysV
適用されない特定のコンテンツを含めることができますかsystemd
?
アップデート#1:SysV
Ubuntu 16のApache2は初期化スクリプト()と共にデフォルトで提供されています/etc/init.d/apache2
。systemd
Apache2の例はありますか?
答え1
systemdには以前のバージョンとの互換性がありますが、1対1ではありません。たとえば、SysV initスクリプトではカスタムサブコマンドを追加できますが、systemdでは追加できません。
私の経験では、古いinitスクリプトを正常に実行しようとすると、追加のデバッグや奇妙な動作が発生する可能性があります。
initスクリプトをシステム単位のファイルに書き換えることで、長期的に時間を節約できると思います。
標準のサードパーティ製ソフトウェアを使用している場合、プロジェクトはすでに利用可能な独自のシステム単位ファイルを提供する可能性が高くなります。
答え2
SysV init スクリプトとのシステム互換性は、以下によって提供されます。systemd-sysv-ジェネレータ、システム単位を動的に作成し、起動/停止/再ロードを実装するための適切なパラメータを使用してinitスクリプトを呼び出します。
タスクを実行するために、systemd-sysv-generatorは次に大きく依存します。LSBヘッダ以下のようにSysV初期化スクリプト:
### 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によって生成されたユニットはsystemd-sysv-generatorの下に保存されるため、/run/systemd/system
ここでファイルを検索する*.service
か、このsystemctl cat
コマンドを使用してユニットの内容を一覧表示できます。このsystemctl edit
コマンドを使用して、SysV初期化スクリプトによって生成されたセルにオーバーライドを追加することもできます。 (たとえば、デバイスに追加の依存関係を追加したり、注文手順を追加したい場合に便利です。)
しかし、SysV initスクリプトをデフォルトのsystemd単位に変換するリスクを取ることはより良いアプローチであり、長期的に利益を得ることができます。特に、コマンドがフォアグラウンド(デーモンの代わりに)とSysV initで実行できる場合はさらにそうです。スクリプトは Daemonize コマンドで実行中です。 (この場合、systemdはより良い可能性があり、コマンド自体をデーモン化した方が良いでしょう。)
確認するFedora マガジンのこの記事SysV initスクリプトをシステム単位に変換する方法に関するヒントとコツが始まります。初期化スクリプトの変換に問題がある場合は、躊躇しないでください。ここに戻って詳細についてお問い合わせください。頑張ってください!