LoginSignup
10
13

More than 1 year has passed since last update.

systemdのUnitファイルのパスを知らなくともUnitファイルを編集する方法

Posted at

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

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13