apacheにcgiエラーがでる

 おうちサーバで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を動かすケースはどんどん減っていっとるやろうしなあ。