php 写bug,日常小 Bug 之数据写到哪去了

一、背景

有个小需求,所以写了个脚本,脚本会把执行成功的数量记录下来,写到文件(successNumber)中。这个脚本需要运行很长的时间,为了防止程序中断,所以在crontab加了定时任务。

* * * * * root /usr/local/bin/php /home/chy/test/test.php >>/tmp/chy_test 2>&1

第一天晚上搞好,在自己目录运行了下符合预期,successNumber文件的数据也正常更新到212了,然后看了下定时任务也启动起来就开开心心的回家了。

第二天来了一看,successNumber竟然还是212,难道说一晚上的时间都没有正常执行?突然间有点慌,然后仔细排查了下:

二、排查过程

ps aux|grep test.php ———>进程还在

ll /tmp/chy_test ———>更新时间也正常

tail -f /tmp/chy_test ———>还在正常输出日志

咦?那么我执行成功的数量到底记录到哪里了??

三、找到Bug

仔细看了下代码,找到记录数据的这部分代码

echo "成功!\n";

$successNumber++;

file_put_contents('successNumber', $successNumber);

不得不说,还是个老生常谈的问题,由于开发的比较简略,所以当时考虑将结果记录到同目录的successNumber这个文件里,但是如果用定时脚本启动的话,那么并不会把数据存入到/home/chy/test/successNumber中。

很早很早之前,就被教育过,定时脚本的路径要写成绝对路径,相对路径有可能出现问题的。

以后还是要仔细+仔细呀,不能犯这种低级Bug。

不过,话说回来,数据到底写到哪里去了?

四、破案

现在的问题就是要找到对于定时任务来说,哪里是根目录,那么我的successNumber肯定就在根目录那边!

上网查了下资料,发现解锁了个盲区,之前看到crontab的顶部有几行代码一直不解其意,只知道缺少这几行定时任务不会执行,这次终于明白了:

SHELL=/bin/bash \\指定了系统要使用哪个shell

PATH=/sbin:/bin:/usr/sbin:/usr/bin \\系统执行 命令的路径

MAILTO=root \\执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户

HOME=/ \\指定了在执行命令或者脚本时使用的主目录

于是终于找到我的成功数据了/successNumber

五、总结

1.牢记定时脚本里的路径要写成绝对路径。

2.还算有所收获,了解了crontab的配置含义。

3.遇到问题还是要多想想,深入挖掘下

本作品采用《CC 协议》,转载必须注明作者和本文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值