systemdのUnitファイルの配置先パスはいっぱいあり、正直どこに置いていいのかわかりづらいです。
systemdを制御するsystemctl(1)にはeditというサブコマンドがあり、Unitファイルのパスを知らなくともUnitファイルを編集できます。 systemctl edit
の利点は2つです。
- 今使っているシステム内で利用すべきパス上でエディタが立ち上がる
- Unitファイルの場所を知らなくても編集できる
- 編集後に
systemctl daemon-reload
を自動実行してくれる- 反映し忘れが無くなる
試しに以下のようにすると ssh.service のUnitファイルのパスを知らなくとも、エディタが立ち上がって編集できるようになります。
sudo systemctl edit --full ssh.service
この時のエディタは SYSTEMD_EDITOR
環境変数、もしくは EDITOR
環境変数で指定されたものになります。
nano が立ち上がっても落ち着いてCTRL+Xしたら apt autoremove --purge nano
してから再チャレンジ。
--full
等のオプション
-
--full
- Unitファイル本体自体を編集します。つけない場合は上書き用Unitファイルを編集することになります。
-
--force
- Unitファイル本体編集時に、ファイルが無い(=新規)ならファイルを作成します。
Unitファイルのパスを知りたい
Unitファイルのパスを知りたい場合は systemctl cat UNIT_NAME
で表示される1行目を見ると良いでしょう。これ以外に方法が無さそうです。
$ sudo systemctl cat ssh.service | head -1
# /etc/systemd/system/ssh.service
標準入力(stdin)から編集するには SYSTEMD_EDITOR=tee
teeを使えば標準入力からの流し込みも可能です。
$ cat ssh_unit_contents.txt
[Unit]
Description = SSH daemon
$ cat ssh_unit_contents.txt | sudo SYSTEMD_EDITOR=tee systemctl edit ssh.service
$ cat << _EOT_ | sudo SYSTEMD_EDITOR=tee systemctl edit ssh.service
[Unit]
Description = SSH daemon
_EOT_
--full --force
と標準入力編集の組み合わせ
--full --force
と標準入力編集を組み合わせれば、インストールが簡単になるでしょう。
$ curl https://hoge.foo/bar.service | sudo SYSTEMD_EDITOR=tee systemctl edit --full --force bar.service
EoT