原創博客鏈接:軟件_crontab任務配置失敗原因總結和技巧
昨天,配置crontab時遇到一些坑。crontab雖然算比較熟悉了,但也有1年多沒碰過,有點生疏了,低級錯誤基本又犯了一遍。順便整理下。
如果配置了crontab,之後沒有生效,怎麼辦?
按照如下順序處理:
1,命令單獨拿出來,終端中執行
這個可以暴露出如下問題
a,腳本是否存在權限問題(chmod +x xx.sh)
b,是否存在(手抖)寫錯路徑等低級錯誤
c,如果依賴特定conda環境,則需要conda activate xxx
2, 是否使用相對路徑
如果1執行ok,則
a,檢查命令中的x.sh等換成/home/xxx/x.sh等絕對路徑,y.py也一樣,用完整絕對路徑.
b,如果py依賴特定conda,則必須使用conda中的特定py,
下面就是conda的center環境的python
1 |
/home/john/anaconda3/envs/center/bin/python xx.py |
3,是否啓動了crontab 服務
1 2 3 4 5 6 7 |
方法1,每次修改crontab自動回顯:crontab: installing new crontab,說明啓動了服務 john@VM-0-4-ubuntu:~$ crontab -e crontab: installing new crontab 方法2 service cron status 下面會顯示activate(running)類似字樣 |
4,check下服務器時間,國外默認時間和國內存在時差(查時間命令(linux):date)
5,檢查時間配置規則,是否正確(右到左,週年月時分,沒啥說的)
6,查看cron執行日誌(是否xx時間啓動xx命令)
1 |
sudo tail -20f /var/log/cron.log |
如果這個文件不存在呢?
1 2 |
sudo vim /etc/rsyslog.d/50-default.conf 找到cron開始的行,前面的註釋符號#去掉 |
7,字符轉義,這個是昨天才注意到的,之前自己執行數據庫備份任務都是py腳本,自動實現按照日期備份,防止同名覆蓋。才注意到crontab也支持命令中夾雜變量。簡單的備份就不用通過py腳本實現了。
1 2 |
終端中:now = date +%Y%m%d && tar -xzvf xx_$now.tar.gz xxx/ crontab:now = `date +\%Y\%m\%d` && tar -xzvf xx_$now.tar.gz xxx/ |
注意”%”前的轉義的”",和外部那個非單引號,而是鍵盤上部1左邊那個按鍵.