systemd edit –full ユニット名

systemctl edit --full ユニット名でユニットファイルを編集できる。

$ sudo systemctl edit --full ユニット名.service

.sereviceは省略できる。

$ sudo systemctl edit --full ユニット名

上記コマンドを実行するとユニットの設定ファイルがエディタで開かれる。

注意点

systemctl edit --full ユニット名で編集するのはyumなどでインストールしていない独自のサービスの場合のみ使用すべき。

yumなどでインストールしたパッケージの場合、通常設定ファイルは/usr/lib/systemd/system/ユニット名.serviceに保存されている。
systemctl edit --full ユニット名を実行した場合、/usr/lib/systemd/system/ユニット名.service/etc/systemd/systetm/ユニット名.serviceにコピーして編集する。

そのためyumパッケージに更新があり、アップグレードした際に/usr/lib/systemd/system/ユニット名.serviceのほうに変更があっても /etc/systemd/systetm/ユニット名.serviceを作成している場合は変更が反映されない。

上記の問題を避けるために、yumでインストールしたパッケージの設定変更は次で説明するoverride.confを使用する。

systemctl editコマンドでoverride.confを編集する

--fullオプションを省略すると/etc/systemd/system/ユニット名.d/override.confファイルを編集する。
本体ファイルとoverride.confファイルに同じ設定項目に対して異なる値を設定すると、override.confファイルの値が優先される。

$ sudo systemctl edit ユニット名.service

直接ユニットファイルを編集する場合はdaemon-reloadが必要

ユニットファイルを直接編集した場合はdaemon-reloadが必要。

$ sudo vim /etc/systemd/system/ユニット名.service

上記コマンドで直接編集した場合は以下のコマンドでdaemon-reloadを実行するまで反映されない。

$ sudo systemctl daemon-reload

systemctl showコマンドでユニットの設定値の一覧を確認する

override.confの内容と合わせて、現状どのような設定値になっているのかを確認したい場合はsystemctl showコマンドを使用する。

$ sudo systemctl show httpd.service
Type=notify
Restart=no
NotifyAccess=main
RestartUSec=100ms
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
RuntimeMaxUSec=infinity
WatchdogUSec=0
WatchdogTimestampMonotonic=0
.
.
.
()

エディタにvimを指定する

デフォルトのエディタがnanoなど使い慣れていないエディタの場合は保存操作になれないことがある。
systemctl editコマンドでエディタを指定する場合はEDITOR環境変数を設定する。
例えばvimを指定する場合は以下のようにする。

$ export EDITOR=vim
$ sudo systemctl edit --full ユニット名

一時的にエディタを指定する場合はEDITOR変数をインラインで指定する。

$ EDITOR=vim sudo systemctl edit --full ユニット名

vimであれば保存して終了するには:wqを入力すればよい。

環境によってはSYSTEM_EDITOR環境変数を設定する必要となる場合がある。

$ export SYSTEM_EDITOR=vim
$ sudo systemctl edit --full ユニット名
$ SYSTEM_EDITOR=vim sudo systemctl edit --full ユニット名