Edited at

systemdでサービスを動かす際、/var/runにディレクトリを作った時の落とし穴と対策

More than 1 year has passed since last update.


環境

CentOS 7


どんな状況?


  • systemdでサービスを起動したい。

  • その時の実行権限がrootじゃない。

  • 故に /var/run/[dir] を作成。


    • もちろん chown で[dir]の権限を実行ユーザにしている。



  • 作成した[dir]に、pidファイルやsockファイルが作られたりする。


何が問題?


対策

/etc/systemd/system/[サービス名].service

PermissionsStartOnly=true

ExecStartPre=/usr/bin/mkdir /var/run/[dir]
ExecStartPre=/usr/bin/chown -R [実行ユーザ]:[実行グループ] /var/run/[dir]
ExecStopPost=/usr/bin/rm -rf /var/run/[dir]

サービス起動前に[dir]を作成

サービス終了時に[dir]を削除(次回起動時にエラーになるため)

参考 : Handling /var/run with systemd

参考 : Systemd入門(4) - serviceタイプUnitの設定ファイル