有个小需求,因此写了个脚本,脚本会把执行成功的数量记录下来,写到文件(successNumber)中。这个脚本须要运行很长的时间,为了防止程序中断,因此在crontab加了定时任务。php
* * * * * root /usr/local/bin/php /home/chy/test/test.php >>/tmp/chy_test 2>&1
复制代码
第一天晚上搞好,在本身目录运行了下符合预期,successNumber文件的数据也正常更新到212了,而后看了下定时任务也启动起来就开开心心的回家了。shell
次日来了一看,successNumber居然仍是212,难道说一夜的时间都没有正常执行?忽然间有点慌,而后仔细排查了下:bash
ps aux|grep test.php --------->进程还在ui
ll /tmp/chy_test --------->更新时间也正常spa
tail -f /tmp/chy_test --------->还在正常输出日志日志
咦?那么我执行成功的数量到底记录到哪里了??code
仔细看了下代码,找到记录数据的这部分代码进程
echo "成功!\n";
$successNumber++;
file_put_contents('successNumber', $successNumber);
复制代码
不得不说,仍是个老生常谈的问题,因为开发的比较简略,因此当时考虑将结果记录到同目录的successNumber这个文件里,可是若是用定时脚本启动的话,那么并不会把数据存入到/home/chy/test/successNumber
中。crontab
很早很早以前,就被教育过,定时脚本的路径要写成绝对路径,相对路径有可能出现问题的。开发
之后仍是要仔细+仔细呀,不能犯这种低级Bug。
不过,话说回来,数据到底写到哪里去了?
如今的问题就是要找到对于定时任务来讲,哪里是根目录,那么个人successNumber确定就在根目录那边!
上网查了下资料,发现解锁了个盲区,以前看到crontab的顶部有几行代码一直不解其意,只知道缺乏这几行定时任务不会执行,此次终于明白了:
SHELL=/bin/bash \\指定了系统要使用哪一个shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin \\系统执行 命令的路径
MAILTO=root \\执行信息将经过电子邮件发送给root用户,若是MAILTO变量的值为空,则表示不发送任务执行信息给用户
HOME=/ \\指定了在执行命令或者脚本时使用的主目录
复制代码
因而终于找到个人成功数据了/successNumber
1.牢记定时脚本里的路径要写成绝对路径。
2.还算有所收获,了解了crontab的配置含义。
3.遇到问题仍是要多想一想,深刻挖掘下