Linux crontab是用來定期執行程序的命令。
通過crontab -e 可以編輯需要定時執行的命令。
這裏記錄一下在ubuntu上實際使用crontab的幾個坑。
log顯示問題
cron 日誌中記錄了crontab中命令執行信息。
Ubuntu系統默認是不打開cron日誌的。需要進行幾步操作。
先打開以下文件
vi /etc/rsyslog.d/50-default.conf
在文件中找到cron.*一行,把前面的#去掉,保存退出。
執行以下命令,重啓系統日誌:
sudo service rsyslog restart
稍微等下就能在/var/log目錄下看到cron.log 文件了。
相對路徑問題
如果程序直接運行沒問題,但在crontab中執行效果不符合預期(要先通過查看log確定目標程序被執行了),很可能是由於路徑問題,crontab中命令的默認執行路徑是當前用戶的根路徑,建議在待執行程序中先添加cd命令,或直接使用絕對路徑。
時間設置問題
crontab 的基本設置方式在網上很好找到,
這裏引用菜鳥教程的說明:
網上很多教程給了一個錯誤的例子(包括菜鳥教程),假定待執行命令爲: /dir/test.sh
* */1 * * * /dir/test.sh
很多教程說上面命令代表每小時執行一次,親測之後發現上面的命令時每分鐘執行一次。查閱了這篇博客中也給出了同樣的結果。
猜測原因是由於上面的命令中第一位分鐘是*號,代表所有取值範圍,也就是每一分鐘。
如果想每小時執行一次,可以採用如下寫法:
*/60 * * * * /dir/test.sh
此方法親測可用。
或者採用下面的寫法(未親測):
1 */1 * * * /dir/test.sh
代表每小時的第一分鐘執行。
參考資料:
1.https://blog.csdn.net/k_young1997/article/details/81606667
2.https://blog.csdn.net/liu0808/article/details/80668705
3.https://www.runoob.com/w3cnote/linux-crontab-tasks.html