背景:工作需要,凌晨定時(shí)運(yùn)行一次py腳本。linux上可以直接使用crontab進(jìn)行定時(shí)任務(wù)。
1、Crond命令詳解
crond 是linux下用來周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個(gè)守護(hù)進(jìn)程过咬,與windows下的計(jì)劃任務(wù)類似
其中:
minute: 表示分鐘,可以是從0到59之間的任何整數(shù)制妄。
hour:表示小時(shí)掸绞,可以是從0到23之間的任何整數(shù)。
day:表示日期耕捞,可以是從1到31之間的任何整數(shù)衔掸。
month:表示月份,可以是從1到12之間的任何整數(shù)俺抽。
week:表示星期幾敞映,可以是從0到7之間的任何整數(shù),這里的0或7代表星期日磷斧。
command:要執(zhí)行的命令振愿,可以是系統(tǒng)命令捷犹,也可以是自己編寫的腳本文件
舉個(gè)栗子:
#每天11.30運(yùn)行腳本
30 11 * * * /home/aaa/test_main.sh
#每隔1分鐘就運(yùn)行一次腳本
*/1 * * * * /home/aaa/test_main.sh
#執(zhí)行Python腳本
30 0 * * * /home/upload/anaconda3/bin/python /home/upload/py/test.py
2、Crond狀態(tài)
首先參看 crond 狀態(tài)
service crond status
如果關(guān)閉的話冕末,就將其啟動(dòng)或者重啟
服務(wù)操作說明
/sbin/service crond start //啟動(dòng)服務(wù)
/sbin/service crond stop //關(guān)閉服務(wù)
/sbin/service crond restart //重啟服務(wù)
/sbin/service crond reload //重新載入配置
/sbin/service crond status //啟動(dòng)服務(wù)
常用方法
crontab -l #查看現(xiàn)有的所有 crontab 任務(wù)
crontab -e #添加或修改 crontab 任務(wù)(類似與vim)
3萍歉、Crond常見錯(cuò)誤
Ⅰ、查看反饋
我在添加任務(wù)后档桃,反饋 You have new mail in /var/spool/mail/upload枪孩。
這是相當(dāng)于Crond的日志,如果腳本沒有正常運(yùn)行的話藻肄,可以去直接查看日志蔑舞。
Ⅱ、python相對(duì)路徑報(bào)錯(cuò)
遇到一個(gè)很詭異的事情:直接執(zhí)行python腳本或把它放到shell腳本執(zhí)行沒啥問題仅炊,一放到crontab里執(zhí)行就無反應(yīng)斗幼。
解決辦法:
crontab里執(zhí)行時(shí)澎蛛,直接把高版本python的全路徑寫上去抚垄,比如:
0 * * * * /usr/local/python3.6/bin/python home/community/test.py
運(yùn)行crontab定時(shí)作業(yè)里邊的東西,都要寫絕對(duì)路徑谋逻,python環(huán)境最好也寫絕對(duì)路徑
Ⅲ呆馁、腳本其他報(bào)錯(cuò)
直接運(yùn)行 python test.py無問題,添加絕對(duì)路徑到crontab里運(yùn)行無反應(yīng)毁兆。
打開 /var/spool/mail/upload 發(fā)現(xiàn)報(bào)錯(cuò)
SyntaxError: Non-ASCII character '\xe5' in file ex16.py on line 1,
ng declared; see http://python.org/dev/peps/pep-0263/ for details
解決辦法:
在文件頭部添加這一句即可 # -- coding: utf-8 -