おうちサーバでcgiの内向けメモブログを動かしているけど、時々cgiが動かなくなっている。エラーログに曰く
[client 192.168.1.25:37516] AH02833: ScriptSock /var/run/httpd/cgisock.1041 does not exist:(以下略)
見ると/var/run/httpdディレクトリがないので、手動で作って、所有者やらパーミッションやらいじって動くようにした。
ところが、しばらくたつと同じエラーが発生するようになる。
調べてみたら、こういうケースがあった。
たとえばRed Hat Enterprise Linux 7では、「/var/run」ディレクトリがtmpfsでマウントされるようになっており、システムをシャットダウンするとファイルが消えます。
なるほど、ubuntuも同様の仕組みになっているわけやな。たぶん20.04からやと思う。
解決策はと探してみると
www.unknownengineer.net
しかしおうちサーバには/etc/tempfiles.d/というディレクトリがない。ubuntuでもいけるのかは不明。要は起動時にディレクトリを作ればいいので、以下の内容の/etc/cron.d/mkdir_apacheを作った。
SHELL=/bin/sh PATH=/bin @reboot root mkdir -p /run/httpd && chown www-data:www-data /run/httpd
apacheサービスの起動よりも先に実行されるようで、問題は一応解決。
apacheサービスの起動スクリプト/etc/init.d/apache2を書き換えるのがスマートなような気がするけど、今後のアップグレードのことを考えて回避。
起動スクリプトが対応アップデートすべき話なんちゃうのとも思ったが、cgiを動かすということはディフォルトではないし、cgiを動かすケースはどんどん減っていっとるやろうしなあ。