一据沈、背景
有個小需求哟沫,所以寫了個腳本,腳本會把執(zhí)行成功的數(shù)量記錄下來卓舵,寫到文件(successNumber)中南用。這個腳本需要運行很長的時間,為了防止程序中斷,所以在crontab加了定時任務(wù)裹虫。
* * * * * root /usr/local/bin/php /home/chy/test/test.php >>/tmp/chy_test 2>&1
第一天晚上搞好肿嘲,在自己目錄運行了下符合預期,successNumber文件的數(shù)據(jù)也正常更新到212了筑公,然后看了下定時任務(wù)也啟動起來就開開心心的回家了雳窟。
第二天來了一看,successNumber竟然還是212匣屡,難道說一晚上的時間都沒有正常執(zhí)行封救?突然間有點慌,然后仔細排查了下:
二捣作、排查過程
ps aux|grep test.php --------->進程還在
ll /tmp/chy_test --------->更新時間也正常
tail -f /tmp/chy_test --------->還在正常輸出日志
咦誉结?那么我執(zhí)行成功的數(shù)量到底記錄到哪里了?券躁?
三惩坑、找到Bug
仔細看了下代碼,找到記錄數(shù)據(jù)的這部分代碼
echo "成功也拜!\n";
$successNumber++;
file_put_contents('successNumber', $successNumber);
不得不說以舒,還是個老生常談的問題,由于開發(fā)的比較簡略慢哈,所以當時考慮將結(jié)果記錄到同目錄的successNumber這個文件里蔓钟,但是如果用定時腳本啟動的話,那么并不會把數(shù)據(jù)存入到/home/chy/test/successNumber
中卵贱。
很早很早之前滥沫,就被教育過,定時腳本的路徑要寫成絕對路徑艰赞,相對路徑有可能出現(xiàn)問題的佣谐。
以后還是要仔細+仔細呀,不能犯這種低級Bug方妖。
不過狭魂,話說回來,數(shù)據(jù)到底寫到哪里去了党觅?
四雌澄、破案
現(xiàn)在的問題就是要找到對于定時任務(wù)來說,哪里是根目錄杯瞻,那么我的successNumber肯定就在根目錄那邊镐牺!
上網(wǎng)查了下資料,發(fā)現(xiàn)解鎖了個盲區(qū)魁莉,之前看到crontab的頂部有幾行代碼一直不解其意睬涧,只知道缺少這幾行定時任務(wù)不會執(zhí)行募胃,這次終于明白了:
SHELL=/bin/bash \\指定了系統(tǒng)要使用哪個shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin \\系統(tǒng)執(zhí)行 命令的路徑
MAILTO=root \\執(zhí)行信息將通過電子郵件發(fā)送給root用戶,如果MAILTO變量的值為空畦浓,則表示不發(fā)送任務(wù)執(zhí)行信息給用戶
HOME=/ \\指定了在執(zhí)行命令或者腳本時使用的主目錄
于是終于找到我的成功數(shù)據(jù)了/successNumber
五痹束、總結(jié)
1.牢記定時腳本里的路徑要寫成絕對路徑。
2.還算有所收獲讶请,了解了crontab的配置含義祷嘶。
3.遇到問題還是要多想想,深入挖掘下