1. 程式人生 > >ubuntu中執行定時任務crontab

ubuntu中執行定時任務crontab

img bsp etc 可能 exp reload 檔案 多個 命令行

今天研究了下ubuntu裏的crontab內置指令。這是設置定時執行腳本任務的指令,我先測試了下最基礎的執行。

第一次使用crontab 時,會出現

no crontab for root - using an empty one

“Select a editor ......”下面有幾個選項,就是叫你選擇編輯器。(選vim)就可以了,我選的第三個。

但是如果你選錯了,就可能會遇到點麻煩,沒有辦法正常編輯,crontab -e。 怎麽辦?

執行這個命令:select-editor (針對crontab的一個命令), 可以讓你重新選一次。

文件位置一般在/var/spool/cron/下,如果你是root用戶,那下面有個root文件,建議日常備份,避免誤刪除導致crontab 文件丟失;默認情況下,crontab中執行的日誌寫在/var/log下。

執行crontab -e 進入編輯頁面,增加需要計劃執行的sh文件

我寫的是*/1 * * * * echo "hello" ,通過這條指令寫入cron.log中。重新啟動crontab 任務 。並在/var/log/cron.log中查看運行情況技術分享圖片

下面稍微解釋下crontab中每行的含義。crontab中的每一行代表一個定期執行的任務,分為6個部分。前5個部分表示何時執行命令,最後一個部分表示執行的命令。每個部分以空格分隔,除了最後一個部分(命令)可以在內部使用空格之外,其他部分都不能使用空格。前5個部分分別代表:分鐘,小時,天,月,星期,每個部分的取值範圍如下:

分鐘 0 - 59

小時 0 - 23

天 1 - 31

月 1 - 12

星期 0 - 6 0表示星期天

除了這些固定值外,還可以配合星號(*),逗號(,),和斜線(/)來表示一些其他的含義:

星號 表示任意值,比如在小時部分填寫 * 代表任意小時(每小時)

逗號 可以允許在一個部分中填寫多個值,比如在分鐘部分填寫 1,3 表示一分鐘或三分鐘

斜線 一般配合 * 使用,代表每隔多長時間,比如在小時部分填寫 */2 代表每隔兩分鐘。所以 */1 和 * 沒有區別

*/2 可以看成是能被2整除的任意值。

註意:

  • 1.Ubuntu 下先判斷cron是否啟動 #ps aux |cron 重啟:sudo /etc/init.d/cron restart 重新載入配置:sudo /etc/init.d/cron reload
  • ubuntu 下需要先設置cron運行日誌存放路徑才能查看crontab的日誌:sudo vi /etc/rsyslog.d/50-default.conf 去掉cron 前面的# 保存。
  • 重啟rsyslog服務:sudo service rsyslog restart 重啟cron服務:sudo service cron restart
  • 停止cron服務:sudo service cron stop

再順帶一提,不喜歡命令行的童鞋可以去 Ubuntu軟件中心 下一個 計劃任務 程序。在軟件中心中搜索 schedule 就可以搜到。它是一個GUI的程序,做的還蠻傻瓜化的。不過好像沒辦法設置成使用root用戶運行任務。而且,對於要ssl到服務器上進行操作的童鞋來說,命令行還是最好(唯一)的工具。

因為我目前就用到這些知識,所以對cron也沒有更多了解。想了解Ubuntu下的cron的童鞋,可以去看看Ubuntu官方的這篇 CronHowTo ,個人覺得講的還是蠻詳細的。

基本的指令:

參數 :
crontab -e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的文字編輯器,則請先設定 VISUAL 環境變數
來指定使用那個文字編輯器(比如說 setenv VISUAL joe)
crontab -r : 刪除目前的時程表
crontab -l : 列出目前的時程表
crontab file [-u user]-用指定的文件替代目前的crontab。
時程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分鐘,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執
行的程序。
當 f1 為 * 時表示每分鐘都要執行 program,f2 為 * 時表示每小時都要執行程序,其餘類推
當 f1 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,f2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
當 f1 為 */n 時表示每 n 分鐘個時間間隔執行一次,f2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推
當 f1 為 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,f2 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推
使用者也可以將所有的設定先存放在檔案 file 中,用 crontab file 的方式來設定時程表。
例子 :
#每天早上7點執行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月內, 每天的早上 6 點到 12 點中,每隔3個小時執行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信給 [email protected] :
0 17 * * 1-5 mail -s "hi" [email protected] < /tmp/maildata
每月每天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分....執行 echo "haha"
20 0-23/2 * * * echo "haha"
註意 :
當程序在你所指定的時間執行後,系統會寄一封信給你,顯示該程序執行的內容,若是你不希望收到這樣的信,請在每一行空一格之
後加上 > /dev/null 2>&1 即可
例子2 :
#每天早上6點10分
10 6 * * * date
#每兩個小時
0 */2 * * * date
#晚上11點到早上8點之間每兩個小時,早上8點
0 23-7/2,8 * * * date
#每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點
0 11 4 * mon-wed date
#1月份日早上4點
0 4 1 jan * date
範例
$crontab -l 列出用戶目前的crontab.

ubuntu中執行定時任務crontab