それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

systemd の設定を上書きでゼロから書くのを避ける

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