[CentOS7][Systemd][自分用メモ] Systemdスクリプトを作っていて/var/runでハマった話。

AIX、UNIX、Linux


@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

というわけで、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
Fedora Linux Servers with Systemd
Richard Leland Petersen

 

Surfing Turtle Press
売り上げランキング : 2473086

Amazonで詳しく見る by AZlink

A Practical Guide to Fedora and Red Hat Enterprise Linux (7th Edition)
A Practical Guide to Fedora and Red Hat Enterprise Linux (7th Edition)
Mark G. Sobell

 

Prentice Hall
売り上げランキング : 528979

Amazonで詳しく見る by AZlink

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました