はじめに
systemdを使っていて、以下のような理由でunitファイルを編集したくなることがあります。
- 起動用のコマンドラインオプションを編集したい
- 起動時に独自のフックを入れたい
- unitファイルがバグってて起動できない
ここでは、systemdで既存のunitを編集するための2つの方法を紹介します。
unitファイルの差分だけを書く
個人的にはこちらの方法をおすすめします。
なぜなら、ほとんどの場合は設定を1〜2個編集するだけで済むはずで、新たにunitファイルを作るのはやりすぎだと思うためです。
この方法でnginx.service
を編集したい場合は以下のコマンドを実行します。
# systemctl edit nginx.service
このコマンドを入力するとエディタが立ち上がるので差分を書いて、保存して終了します。
差分は/etc/systemd/system/<unit名>.d/override.conf
に保存されます。
unitファイルのコピーを編集する
unitファイルのコピーを/etc/systemd/system
に作成して、それを編集する方法です。
編集箇所がかなりの量になる場合はこちらが楽かもしれません。
デメリットとして、前述の差分を書く方法とは違い、こちらは1からunitファイルを作るのと変わらないためバージョンアップ等に対応できない点があります。
この方法でnginx.service
を編集したい場合は以下のコマンドを実行します。
# systemctl edit --full nginx.service
daemon-reloadの必要性
この2つの方法では、編集後に自動的に# systemctl daemon-reload
が実行されるので別途実行する必要はありません。
ハマりそうな点について
[Service]
のExecStart
を編集する際には、以下のようにすると既存の設定を上書きできます。
[Service]
ExecStart=
ExecStart=新しい設定
参考
Arch Wikiの「Editing provided unit files」の項目
https://wiki.archlinux.org/index.php/Systemd#Editing_provided_unit_files