一北专、crontab日志
??使用crontab時(shí)一個(gè)重要需求是查詢log。因?yàn)槎〞r(shí)任務(wù)沒(méi)有顯式的terminal彈出,因此執(zhí)行是在后臺(tái)進(jìn)行的抬闯。為了實(shí)時(shí)了解定時(shí)任務(wù)執(zhí)行的情況井辆,需要了解crontab的日志訪問(wèn)方法。
grep CRON /var/log/syslog
??但是這個(gè)只能顯示crontab運(yùn)行的概況信息溶握。如果想要詳細(xì)了解杯缺,需要查看mail
tail -f /var/mail/$USER
??這個(gè)方式其實(shí)對(duì)于crontab任務(wù)來(lái)說(shuō)挺重要的。因?yàn)檫@樣可以直接看到計(jì)劃任務(wù)中的腳本在屏幕上的輸出結(jié)果睡榆。值得注意的是萍肆,如果之前沒(méi)有用過(guò)crontab,在這里應(yīng)該是找不到相關(guān)文件的胀屿。此時(shí)需要安裝一個(gè)postfix:
sudo apt-get install postfix
??注意:安裝postfix時(shí)最好選擇local那個(gè)發(fā)送郵件選項(xiàng)塘揣。否則是創(chuàng)建不了/var/mail/$USER路徑的。安裝好之后應(yīng)該就可以查看郵件了宿崭∏渍。可以將查看cron郵件的命令以alias或者函數(shù)的形式加到bashrc中,這樣每次就可以快捷訪問(wèn)該命令了葡兑。
二奖蔓、使用中的坑:
1. crontab中的環(huán)境和主機(jī)環(huán)境相差很大。
??crontab中的環(huán)境非常簡(jiǎn)單讹堤,可以在crontab上掛一個(gè)/bin/echo $PATH然后重定向到某個(gè)日志來(lái)觀察锭硼,結(jié)果應(yīng)該只有兩三條路徑,和本機(jī)的PATH相差很大蜕劝。因此最好將本機(jī)環(huán)境變量PATH的具體內(nèi)容顯式地在cron腳本中export出來(lái):
export PATH=$PATH:/home/sensetime/.autojump/bin:/opt/ros/kinetic/bin:/usr/local/cuda-9.0/bin:/home/sensetime/bin:/home/sensetime/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin:/usr/local/bin:/usr/local/autoware/bin:/usr/local/autoware/bin:/home/sensetime/miniconda3/bin:/usr/local/autoware/bin
2. crontab默認(rèn)用的是dash
??crontab應(yīng)該是像ubuntu一樣檀头,用dash而不是bash作為默認(rèn)的shell。注意dash是沒(méi)有source命令的岖沛。故可以在crontab -e最上面加上一條: SHELL=/bin/bash
3. 某些計(jì)劃任務(wù)的運(yùn)行結(jié)果不會(huì)發(fā)送郵件
??原因暫時(shí)不知道
三暑始、常見(jiàn)用法
開(kāi)機(jī)運(yùn)行腳本:
@reboot /path/to/script.shrun cron task immediately
https://unix.stackexchange.com/questions/42715/how-can-i-make-cron-run-a-job-right-now-for-testing-debugging-without-changing