RHEL7/CentOS7では/var/run (/run) 内のディレクトリの作成はtempfile.dで処理しなければいけなかった。 http://t.co/2o6trs9cK8 http://t.co/sGDKgDQosr
— Takashi Takizawa (@ttkzw) 2014, 7月 24
@ttkzw さんのツイートを見て思い出したので、自分でも備忘録として残しておきます。
というのも、自宅のDNSサーバはUnboundを動かしているのですが、そちらはソースからコンパイルしているもので、Systemdスクリプトを作りこまないといけないのですが、うちの環境ではpidファイルが以下のディレクトリに作成されます。
/var/run/unbound/unbound.pid
でスクリプト自体も以下のような感じで作りこんだわけです。
[Unit]
Description=Unbound is a validating, recursive, and caching DNS(SEC) resolver.
After=syslog.target network.target
[Service]
EnvironmentFile=/etc/sysconfig/unbound
Type=forking
ExecStart=/usr/local/sbin/unbound
PIDFile=/var/run/unbound/unbound.pid
LimitNOFILE=10240
LimitMEMLOCK=infinity
Restart=on-failure
[Install]
WantedBy=multi-user.target
でいざsystemdスクリプトを登録してみて実行してみると、何故かエラーが発生してしまう状況でした。
でよーく見てみると、/var/run
の下にunboundディレクトリが作成されていないのが分かりました。
何でディレクトリ無いんだろうと思いながら、mkdirでディレクトリを作成し実行できるようになったのですが、その後、再起動するとunboundサービスが起動できていないことを確認しました。
再度確認してみると、/var/run/unbound
がない!
よく調査してみると、どうやら/etc/tmpfiles.d/
配下に、明示的に/var/run
配下にディレクトリ/ファイルを作成することを設定する必要があったのです。
というわけで、tmpfiles.d
配下に以下の様なファイルを作成しました。
D /var/run/unbound 0755 unbound unbound -
各パラメータについてはリンク先を参照していただきたいのですが、これで再起動しても/var/run
配下にunboundディレクトリが作成され、そこにunbound.pid
ファイルが配置されるのを確認しました。
ちなみに家ではzabbixのpidファイルなども/var/run/zabbix
の配下においていたもので、こちらについても以下のようなファイルを用意することで問題を解決することが出来ました。
# zabbix runtime directory
d /run/zabbix 0755 zabbix zabbix -
systemdスクリプト作って実行してみたけど実行できないなぁという方の一助になれば幸いです。
Fedora Linux Servers with Systemd Richard Leland Petersen
Surfing Turtle Press |
A Practical Guide to Fedora and Red Hat Enterprise Linux (7th Edition) Mark G. Sobell
Prentice Hall Amazonで詳しく見る by AZlink |