在服務(wù)器上經(jīng)常使用crontab來定時處理一些任務(wù)编整,但是總會出現(xiàn)這樣或那樣的問題舔稀,這里做下總結(jié)
環(huán)境變量
crontab 在執(zhí)行指令時,和你直接在 shell里面執(zhí)行指令所處的環(huán)境不一樣所以我們需要額外的處理掌测,對每個指令建立一個sh文件内贮,并在頭部指令環(huán)境信息
#/bin/sh
. /etc/profile
. ~/.bash_profile
PATH=$PATH:/usr/local/bin
export PATH
指令 2>&1
crontab 日志查看
crontab 日志位于 /var/log/cron*
文件,一般需要root才可以查看
>/dev/null 2>&1
在crontab中任務(wù)被執(zhí)行后,發(fā)現(xiàn)有生成日志文件夜郁,但是日志文件內(nèi)容為空什燕,則需要在后面增加 2>&1
,那么2>&1
時什么意思呢拂酣?
>
用于重定向
/dev/null
是任何發(fā)送數(shù)據(jù)的黑洞秋冰,都將被丟棄
2
是標準錯誤的文件描述符
>
用于重定向
&
是文件描述符的符號(沒有它,以下1
將被視為文件名)
1
是標準輸出的文件描述符
因此>/dev/null 2>&1
將程序的輸出重定向到/dev/null
婶熬。包含Standard Error
和Standard Out
。Linux文檔項目的I / O重定向頁面提供了更多信息埃撵。
cron
只會在你的工作有輸出時發(fā)給你赵颅。隨著一切重定向到null
,沒有輸出暂刘,因此cron
不會給你發(fā)郵件饺谬。
python3 出現(xiàn) ImportError: No module named
服務(wù)器中可能存在多個python環(huán)境,在shell去執(zhí)行指令用
python3 /.../.../.../.../py
是沒有問題谣拣,但是同樣的指令在crontab中就會出現(xiàn)里面引用的包不存在這需要我們需要把python3的地址寫全才行(也是環(huán)境導(dǎo)致的)
/usr/local/bin/python3 /.../.../.../.../py
募寨。