linux下定時執行任務方法
(1)at命令
假如我們只是想 要讓特定任務執行一次,那麼,這時候就要用到at監控程式了。
設定at命令很簡單,指示定執行的時間,那麼就會在哪個時候執行。at類似列印 程序,會把任務放到/var/spool/at目錄中,到指定時間執行它 。at命令相當於另一個shell,執行at time命令時,它傳送一個個命令,可以輸入任意命令或者程式。at now + time命令可以在指示任務。
假設處理一個大型資料庫,要在別人不用系統時去處理資料,比如凌晨3點10分。那麼我們就應該先建立/home/kyle/do_job指令碼管理資料庫,計劃處理/home/kyle/do_job檔案中的結果。正常方式是這樣啟動下列命令:
# at 2:05 tomorrow
at>/home/kyle/do_job
at> Ctrl+D
AT Time中的時間表示方法
-----------------------------------------------------------------------
時 間 例子 說明
-----------------------------------------------------------------------
Minute at now + 5 minutes 任務在5分鐘後執行
Hour at now + 1 hour 任務在1小時後執行
Days at now + 3 days 任務在3天后執行
Weeks at now + 2 weeks 任務在兩週後執行
Fixed at midnight 任務在午夜執行
Fixed at 10:30pm 任務在晚上10點30分
注意:一定要檢查一下atq的服務是否啟 動,有些作業系統未必是預設啟動的, linux預設為不啟動,而ubuntu預設為啟動的。檢查是否啟動,用service atd檢查語法,用service atd status檢查atd的狀態,用service atd start啟動atd服務。
檢視at執行的具體內容:一般位於/var/spool/at目錄下面, 用vi開啟,在最後一部分就是你的執行程式
(2)crontab
cron是一個linux下 的定時執行工具,可以在無需人工干預的情況下執行作業。由於Cron 是Linux的內建服務,但它不自動起來,可以用以下的方法啟動、關閉這個服務:
/sbin/service crond start //啟動服務/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置
/sbin/service crond status //檢視服務狀態
(crond或cron看實際情況
service crond start #啟動服務
service crond stop #關閉服務
service crond restart #重啟服務
service crond reload #重新載入配置
)
你也可以將這個服務在系統啟 動的時候自動啟動:
在/etc/rc.d/rc.local這個指令碼的末尾加上:
/sbin/service crond start
現在Cron這個服務已經在程序裡面了,我們就可以用這個服務了,Cron服務提供以下幾種介面供大家使用:
1、直接用crontab命 令編輯
cron服務提供 crontab命令來設定cron服務的,以下是這個命令的一些引數與說明:
crontab -u //設定某個使用者的cron服務,一般root使用者在執行這個命令的時候需要此引數
crontab -l //列出某個使用者cron服務的詳細內容
crontab -r //刪除某個使用者的cron服務
crontab -e //編輯某個使用者的cron服務
比如說root檢視自己的cron設定:crontab -u root -l
再例 如,root想刪除fred的cron設定:crontab -u fred -r
基本格式 :
* * * * * command
分 時 日 月 周 命令
第1列表示分鐘1~59 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要執行的命令
crontab檔案的一些例子:
#每晚的21:30重啟apache。
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#每月1、10、22日
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#每天早上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點
http://j3j5.com/post-41.html
執行方法一: 如果用的任務不是以hourly monthly weekly方式執行,則可以將相應的crontab寫入到crontab 或cron.d目錄中。
示例: 每隔一分鐘執行一次指令碼 /opt/bin/test-cron.sh 可以在cron.d新建指令碼 echo-date.sh 內容為
1 |
*/1 * * * * root /opt/bin/ test - cron .sh |
在指定的時間執行任務
也可以通過at命令來控制在指定的時間執行任務 如: at -f test-cron.sh -v 10:25 其中-f 指定指令碼檔案, -v 指定執行時間 首先用 contab -l 匯出contab的配置,然後編輯contabs.tmp檔案。以一下格式新增一行: 分鐘 小時 天 月 星期 命令 比如 10 3 * * 0,6 hello 就是每週六、週日的3點10分執行hello程式。 15 4 * * 4-6 hello 就是從週四到週六的4點15點執行hello程式。 然後用 contab contabs.tmp 命令匯入新的配置。 一般不建議直接修改/etc/下的相關配置檔案。 啟動cron程序的方法:/etc/init.d/crond start 開機就啟動cron程序的設定命令:chkconfig --add crond 執行方法二: 把cron加入到啟動指令碼中: # rc-update add vixie-cron default crontab -l #檢視你的任務 crontab-e#編輯你的任務 crontab-r#刪除使用者的crontab的內容
例項講解二: 系統cron設定:/etc/crontab 通過 /etc/crontab 檔案,可以設定系統定期執行的任務,當然,要想編輯這個檔案,得有root許可權 0 7 * * * root mpg123 ~/wakeup.mp3 分 時 日 月 周 示例:
1 |
0 4 * * 0 root emerge --sync && emerge -uD world #每週日凌晨4點,更新系統 |
2 |
0 2 1 * * root rm -f /tmp/* #每月1號凌晨2點,清理/tmp下的檔案 |
3 |
0 8 6 5 * root mail robin < /home/galeki/happy.txt #每年5月6日給robin發信祝他生日快樂 |
假如,我想每隔2分鐘就要執行某個命令,或者我想在每天的6點、12點、18點執行命令,諸如此類的週期,可以通過 “ / ” 和 “ , ” 來設定:
01 |
*/2 * * * * root ............... #每兩分鐘就執行........ |
02 |
0 6,12,18 * * * root ............... #每天6點、12點、18點執行........ |
03 |
每兩個小時 |
04 |
0 */2 * * * echo "have a break now."
>> /tmp/test.txt |
05 |
晚上11點到早上8點之間每兩個小時,早上八點 |
06 |
0 23-7/2,8 * * * echo "have a good dream:)"
>> /tmp/test.txt |
07 |
每個月的4號與每個禮拜的禮拜一到禮拜三的早上11點 |
08 |
0 11 4 * 1-3 command line |
09 |
1月1日早上4點 |
10 |
0 4 1 1 * command line |
收穫:可以把經常要做的一些事放到其中,簡化工作量,如每週一檢查伺服器的執行狀態,檢視報告,殺掉一些程序等等……