systemd の上書き
systemd のユニット定義は、上書きしたり、変数を定義したりで、似たような設定をまとめることが出来る。
変数を使う
systemctl start serial-getty@ttyUSB0.service
name@.service
で定義されたサービスは name@VARIABLE.service
と@以降に引数を与えることができ、定義ファイルの中で %I
と書くことで参照できる。
systemd の定義内容を確認 / cat
cat を使えば、いまの内容を見ることが出来る。
systemctl cat serial-getty@.service
編集する / edit
edit で追記(上書き)編集が出来る。
systemctl edit serial-getty@ttyUSB0.service
ただし、typeによっては、ExecStartを上書きが不可能。っていうか、ExecStartやExecStartPreのように複数記述が許可されるものは、上書きではなく追記になる。 まああれだ一番大事なExecStartを上書きするなら次に紹介する --full でから定義を作ったほうが確実
また、@name
を指定するときは、edit時に指定すればいい。
ただし、Service has more than one ExecStart= setting, which is only allowed which is only allowed for Type=oneshot services. Refusing
のように、追記がエラーになる場合は、edit --full
(後述)を試す。
編集を捨てる / revert
edit したものを破棄してなかったコトにするには、revert
する
systemctl revert serial-getty@ttyUSB0.service
edit --full 完全なコピー を作って上書き
一番便利。
上書きでは中途半端になるとき、同名のファイルを優先度の高いフォルダに作って上書きを実現する
systemctl edit --full serial-getty@ttyUSB0.service
この場合、次のコマンドと同等になる。
ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/serial-getty@ttyUSB0.service vim /etc/systemd/system/serial-getty@ttyUSB0.service
fullしたときは、revertするのでは消えなかったので rm する。
rm /etc/systemd/system/serial-getty@ttyUSB0.service
edit --full
を追記ではなく、上書きができる。多分大体はこっちを使う。便利。
full を選ぶと、ファイルがコピーされる。
たとえば、dpkg(apt)で入れた、システムのsystemdファイルが
/lib/systemd/system/shairport-sync.service
etc
にコピーされて編集結果として保存される。
/etc/systemd/system/shairport-sync.service
aptで作られたsystemdユニットをコピーして編集するなら edit --full を使うほうが良さそう
2023-07-28
edit --full
に付いて追記
参考資料
configuration - How do I override or configure systemd services? - Ask Ubuntu