@kotyのブログ

.NETとかJavaとかPythonとか勉強会のこととかを、田舎者SEがつづります。記事のライセンスは"CC BY"でお願いします。

OS稼働中に/tmpの内容が消える現象への対処

追記:消されて困るものをそんな所に置くなというご意見はおっしゃる通り。今回は、~/var/run ディレクトリを作ってそこに移して対応した。

追記終わり

CentOS7およびAmazon Linux2 での話。ubuntu server でどうかは知らん。

OS再起動時に/tmpがクリアされる認識はあったが、OS稼働中に/tmpの内容が消える事象が発生した。

直接の事象は supervisord.confで

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

と設定しているときに、supervisorctl コマンド実行時に supervisor.sock が見つからずに失敗するというもの。 supervisord をrestartすれば済んでいたのでしばらく放置していた。

よくよく調べると、 systemd-tmpfiles-clean.timer なるsystemdのデーモンがあり、こいつが消している模様。

$ cat /usr/lib/tmpfiles.d/tmp.conf
#  This file is part of systemd.
・・・中略・・・
# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

10日過ぎたら消されるようだ。

というわけで、このtimerをdisableにするか、消されたら困るファイルは別の場所に移す対応が必要。systemdにtimerなんて機能があることを初めて知ったのだった。*1

参考:

rskmt.hateblo.jp

qiita.com

*1:常識だろと言われないかビクビクしながら書いているが、みなさんこれくらいのことは把握して使っているんだろうか