crontab是一個(gè)強(qiáng)大的定時(shí)器,用戶可以在編寫腳本,使crontab定時(shí)執(zhí)行一個(gè)shell腳本或者一系列Linux命令。
crontab命令格式:
crontab [ -u user ] file
或者
crontab [ -u user ] { -l | -r | -e }
file : 時(shí)程表,是一個(gè)符合crontab命令讀取格式的文件,格式在文章下面詳細(xì)說
-u user : 是指目標(biāo)user,是可選參數(shù)。如果不使用 -u user 的話,就是表示設(shè)定當(dāng)前用戶的時(shí)程表。若要指定其他用戶,則當(dāng)前用戶必須要有其權(quán)限(比如說是 root)才能夠指定它要執(zhí)行的時(shí)程表,因?yàn)闀r(shí)程表里面會(huì)用到shell命令。
參數(shù)說明:
- -e : 執(zhí)行文字編輯器來設(shè)定時(shí)程表,內(nèi)定的文字編輯器是 VI,如果你想用別的文字編輯器,則請(qǐng)先設(shè)定 - -VISUAL 環(huán)境變數(shù)來指定使用那個(gè)文字編輯器(比如說 setenv VISUAL joe)
- -r : 刪除目前的時(shí)程表
- -l : 列出目前的時(shí)程表
時(shí)程表的格式如下:
f1 f2 f3 f4 f5 program
- 其中 f1 是表示分鐘,f2 表示小時(shí),f3 表示一個(gè)月份中的第幾日,f4 表示月份,f5 表示一個(gè)星期中的第幾天。program 表示要執(zhí)行的程序。
- 當(dāng) f1 為 * 時(shí)表示每分鐘都要執(zhí)行 program,f2 為 * 時(shí)表示每小時(shí)都要執(zhí)行程序,其馀類推
- 當(dāng) f1 為 a-b 時(shí)表示從第 a 分鐘到第 b 分鐘這段時(shí)間內(nèi)要執(zhí)行,f2 為 a-b 時(shí)表示從第 a 到第 b 小時(shí)都要執(zhí)行,其馀類推
- 當(dāng) f1 為 */n 時(shí)表示每 n 分鐘個(gè)時(shí)間間隔執(zhí)行一次,f2 為 */n 表示每 n 小時(shí)個(gè)時(shí)間間隔執(zhí)行一次,其馀類推
- 當(dāng) f1 為 a, b, c,... 時(shí)表示第 a, b, c,... 分鐘要執(zhí)行,f2 為 a, b, c,... 時(shí)表示第 a, b, c...個(gè)小時(shí)要執(zhí)行,其馀類推
- 使用者也可以將所有的設(shè)定先存放在文件中,用 crontab file 的方式來設(shè)定時(shí)程表。
-
各個(gè)時(shí)間位置的詳細(xì)含義如圖所示
參數(shù)詳細(xì)說明
實(shí)例
要運(yùn)行crontab,先運(yùn)行命令(centos)
service start crond
- 每月每天每小時(shí)的第 0 分鐘執(zhí)行一次 /bin/ls,定時(shí)任務(wù)運(yùn)行時(shí),輸出是不會(huì)在命令窗口看得到的,所以可以把命令的輸出重定向到固定文件
crontab -e
0 * * * * /bin/ls >> /tmp/crontab_ls.log
crontab -l
- 在 12 月內(nèi), 每天的早上 6 點(diǎn)到 12 點(diǎn),每隔 3 個(gè)小時(shí) 0 分鐘執(zhí)行一次 /usr/bin/backup
crontab -e
0 6-12/3 * 12 * /usr/bin/backup
crontab -l
- 周一到周五每天下午 5:00 寄一封信給 alex@domain.name
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
- 每月每天的午夜 0 點(diǎn) 20 分, 2 點(diǎn) 20 分, 4 點(diǎn) 20 分....執(zhí)行 echo "haha"
20 0-23/2 * * * echo "haha"
下面再看看幾個(gè)具體的例子:
0 */2 * * * /sbin/service httpd restart ##意思是每?jī)蓚€(gè)小時(shí)重啟一次apache
50 7 * * * /sbin/service sshd start ##意思是每天7:50開啟ssh服務(wù)
50 22 * * * /sbin/service sshd stop ##意思是每天22:50關(guān)閉ssh服務(wù)
0 0 1,15 * * fsck /home ##每月1號(hào)和15號(hào)檢查/home 磁盤
1 * * * * /home/bruce/backup ##每小時(shí)的第一分執(zhí)行 /home/bruce/backup這個(gè)文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; ##每周一至周五3點(diǎn)鐘,在目錄/home中,查找文件名為*.xxx的文件,并刪除4天前的文件。
30 6 */10 * * ls ##意思是每月的1、11、21、31日是的6:30執(zhí)行一次ls命令
刪除定時(shí)任務(wù)
crontab -l 會(huì)刪除當(dāng)前所有的定時(shí)任務(wù),假如有刪除特定的定時(shí)任務(wù)的需求,可以通過-e的方式來運(yùn)行定時(shí)任務(wù),然后在需要?jiǎng)h除定時(shí)任務(wù)時(shí),通過crontab -e編輯當(dāng)前的定時(shí)任務(wù)列表,把需要?jiǎng)h除的任務(wù)刪除再保存即可
