Ubuntu下用crontab 部署定時任務shell指令碼
1、首先建立一個定時任務:每分鐘向螢幕輸出"Hello world!"。
有兩種實現方式:
1)輸入crontab -e命令,根據提示直接在當前cron task文字最後面插入如下命令(記得回車):
* * * * * echo "Hello world!"
2)由於每個使用者的定時任務都在/var/spool/cron/crontabs目錄下有個與使用者名稱一致的任務檔案,因此也可以通過vim直接編輯:
sudo vim /var/spool/cron/crontabs/waterfronter #注:waterfronter為當前使用者名稱
同樣在檔案末行插入:
* * * * * echo "Hello world!"
儲存退出,並通過crontab -l檢視定時任務建立成功。
2、然後等待,若干分鐘後發現螢幕並未輸出"Hello world!"怎麼回事?!
1)剛開始懷疑是cron服務沒有啟動,遂執行:
sudo service cron status
發現cron服務是running的,排除;
2)繼而懷疑是任務檔案建立後未能被系統及時get到,因而執行:
sudo service cron restart
重啟cron後問題依舊,排除;
3)於是進一步檢視cron執行日誌(/var/log/cron.log
sudo
vim /etc/rsyslog.d/50-default.conf
找到cron.log相關行,將前面註釋符#去掉,儲存退出,重啟rsyslog:
sudo
service rsyslog restart
執行less -10 /var/log/cron.log再次檢視cron執行日誌,log出來了,提示如下資訊:
No
MTA installed, discarding output
原因是cron把螢幕輸出都發送到email了,而當前環境並未安裝email server,於是系統報錯,解決方面就是不要直接向螢幕輸出內容,而是重定向到一個檔案。
3、修改任務檔案
sudo vim /var/spool/cron/crontabs/waterfronter
將末行改為:
* * * * * echo "Hello world!" >> /tmp/cron_log.txt
儲存退出,同時reload cron服務:
sudo service cron reload
若干分鐘後檢視/tmp/cron_log.txt,“Hello world!”每隔一分鐘輸出一次,問題解決。
命令總結:
用以下的方法啟動、關閉這個cron服務:
service cron start //啟動服務
service cron stop //關閉服務
service cron restart //重啟服務
service cron reload //重新載入配置
檢視crontab服務狀態:service cron status
手動啟動crontab服務:service cron start
新增排程任務可用兩種方法:
1)、在命令列輸入: crontab -e 然後新增相應的任務,wq存檔退出。
2)、直接編輯/etc/crontab 檔案,即vi /etc/crontab,新增相應的任務。
crontab -e配置是針對某個使用者的,而編輯/etc/crontab是針對系統的任務
檢視排程任務
crontab -l //列出當前的所有排程任務
crontab -l -u jp //列出使用者jp的所有排程任務
刪除任務排程工作
crontab -r //刪除所有任務排程工作
*
* * * * echo "Hello world!" 中“*”的解釋:
minute - 從0到59的整數
hour - 從0到23的整數 day - 從1到31的整數 (必須是指定月份的有效日期) month - 從1到12的整數 (或如Jan或Feb簡寫的月份) dayofweek - 從0到7的整數,0或7用來描述週日 (或用Sun或Mon簡寫來表示) command - 需要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義指令碼的命令)除了數字還有幾個特殊的符號:"*"、"/"和"-"、","
- *代表所有的取值範圍內的數字
- "/"代表每的意思,"/5"表示每5個單位
- "-"代表從某個數字到某個數字
- ","分開幾個離散的數字
15,30,45,59 * * * * echo "xgmtest....." 表示,每隔15分鐘,執行一次列印命令
每天早上
6
點
0
6
*
* * echo
"Good
morning."
>>
/tmp/test.txt //注意單純echo,從螢幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。
每兩個小時(第一個為
15
,指明沒兩個小時的第
15
min中執行一次)
15
*/
2
*
* * echo
"Have
a break now."
>>
/tmp/test.txt
晚上
11
點到早上
8
點之間每兩個小時和早上八點
0
23
-7
/
2
,
8
*
* * echo
"Have
a good dream"
>>
/tmp/test.txt
每個月的
4
號和每個禮拜的禮拜一到禮拜三的早上
11
點
0
11
4
*
1
-3
command
line
1
月
1
日早上
4
點
0
4
1
1
*
command line
每小時(第一分鐘)執行/etc/cron.hourly內的指令碼
01
*
* * * root run-parts /etc/cron.hourly
每天(凌晨