tmp目录自动清理机制引发的血案

tmp目录自动清理机制引发的血案

故障背景:

12月16日,下午3点,突然华西的接口报错,业务全部中断,微信报警内容为: new SoapClient 初始化soap 出错。

排查过程

由于以前出现过类似的问题,soap 过期后不能自动生成新的soap缓存文件,初步怀疑是soap过期导致的。查看php.ini文件, 发现soap的过期时间为10年,具体参数为:

soap.wsdl_cache_ttl=315360000,不是时间问题,继续找问题

4台服务器全部过期? 瞬间想到了一个问题, 这4台php是同一个时间安装的,  soap 缓存同时过期,怀疑是/tmp 自动删除机制造成的。通过进一步排查,证实了这个问题。因为soap 缓存默认是放在/tmp下的。具体参数为:

; http://php.net/soap.wsdl-cache-dir
soap.wsdl_cache_dir=”/tmp”

下面是服务器上的/tmp自动删除机制

/etc/cron.hourly

/etc/cron.daily

##以上两个文件 系统默认执行的定时任务。

进入 /etc/cron.daily

可以看到一个tmpwatch

cat  tmpwatch

flags=-umc

/usr/sbin/tmpwatch “$flags” -x /tmp/.X11-unix -x /tmp/.XIM-unix \

-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix 240 /tmp

/usr/sbin/tmpwatch “$flags” 720 /var/tmp

for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do

if [ -d “$d” ]; then

/usr/sbin/tmpwatch “$flags” -f 720 “$d”

fi

done

可以看到调用了一个叫tmpwatch 的脚本,并且,我们可以看到传入参数中 对我们有意义的有 /tmp  240

然后 man 一下 tmpwatch

SYNOPSIS

tmpwatch [-u|-m|-c] [-MUadfqstvx] [–verbose] [–force] [–all]

[–nodirs] [–nosymlinks] [–test] [–fuser] [–quiet]

[–atime|–mtime|–ctime] [–dirmtime] [–exclude <path>]

[–exclude-user <user>] <hours> <dirs>

有一个 hours

240 = 10*24 整好是10天

具体原因是 tmp是一个特殊的文件夹,系统会自动清理,下次最好不好把重要的文件放在/tmp,被清理了就不好了!

 解决方案

修改php.ini文件, 把soap的路径改为其他地方即可!

总结:

多看, 多学, 多记,谨小慎微,才能防卫于未然。

One thought on “tmp目录自动清理机制引发的血案

发表评论

邮箱地址不会被公开。 必填项已用*标注