Edited at

systemdで既存のunitを編集する2つの方法

More than 3 years have passed since last update.


はじめに

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