
SysV init スタイルのファイルを Systemd Unit ファイルに変換していますが、その init セクション ブロックは次のようになります。
### BEGIN INIT INFO
# Provides: ifcheck
# Required-Start: $local_fs
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Network interfaces check & replace
# Description: Checks if the interfaces were corrupted or if the special section is missing. If so, a default version will be copied over.
### END INIT INFO
実行レベル 0 ~ 6 は、さまざまな systemd ターゲットに対応していることがわかっています。
╔══════════════════════╦═══════════════════╗
║ Run Level (SysVinit) ║ Systemd Target ║
╠══════════════════════╬═══════════════════╣
│ Run level 0 │ poweroff.target │
├──────────────────────┼───────────────────┤
│ Run level 1 │ rescue.target │
├──────────────────────┼───────────────────┤
│ Run level 2 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 3 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 4 │ multi-user.target │
├──────────────────────┼───────────────────┤
│ Run level 5 │ graphical.target │
├──────────────────────┼───────────────────┤
│ Run level 6 │ reboot.target │
├──────────────────────┼───────────────────┤
│ Emergency │ emergency.target │
└──────────────────────┴───────────────────┘
(According to https://www.tecmint.com/change-runlevels-targets-in-systemd/ )
S
しかし、私はこれまでランレベルとして見たことがありません。シングルユーザー向けであるとする定義もあるその間他の実行レベルの同義語として定義するものもありますそしてなお決定的な定義がない人もいる。
私が使用しているバージョンは、おそらくLinux 標準ベース仕様なぜなら、init infoブロックの直後に、lsb 初期化関数(出典: . /lib/lsb/init-functions
)。また、システムでは Debian 8 Jessie が実行されています。
実行レベルに相当する systemd ユニット ファイルにどのようなターゲットを配置すればよいですかS
?
答え1
S
systemd には直接対応していません。systemd-sysv-generator
プログラムはこのような van Smoorenburg スクリプトを処理しませんrc
。
デビアン持っていましたそのプログラムのパッチ版は、デフォルトの依存関係のないサービスユニット内でrc
使用されるスクリプトをラップし、wanted-by でした。これは不完全でしたが、S
sysinit.target
全ての動作は不完全です。なぜなら、van Smoorenburgスクリプトsystemd-sysv-generator
を翻訳するための万能のメカニズム的な方法が存在しないからです。rc
rc
Debian systemd の開発者は、 Debian で使用されていたvan Smoorenburg スクリプトがすべて適切なサービス ユニットに置き換えられたと判断し、2016 年 7 月にパッチを廃止しました。S
あなたのスクリプトは自作のようです。
この場合、実行レベルを完全に忘れた方がよいでしょうS
。説明だけに基づいた私の推測では、実際に作成する必要があるのは次のようなサービス ユニットです。
デフォルトの依存関係=いいえ 後=local-fs.target 前=ネットワーク-pre.target 希望=ネットワーク-pre.targetそしてそれは
Wanted-By
おそらく適切なものでしょうbasic.target
。
あなたのサービスが実際に何をするかにもよりますが、その後の注文はlocal-fs.target
やり過ぎかもしれません。しかし、それはあなただけが決められることです。