在linux系列中,常常通過crontab指令來維護crontab檔案,進而達到送出計劃作業的目的。在介紹crontab指令之前,我們先來了解下crontab檔案中每個條目中各個域的格式和意義。
crontab每個條目都有6個域,分别對應6列,從左到右依次為第1列,第2列...第6列。下面是這些域的詳細介紹:
第1列:分鐘 1~59
第2列:小時 1~23
第3列:日期 1~31
第4列:月份 1~12
第5列:星期 0~6(0表示星期日)
第6列:要運作的指令
在前5列中,可以用減号"-" 表示範圍;用逗号","表示或;用星号"*"表示連續的時間,如果對某域沒有特别的限制,該域也需要填入星号"*"。"*/5" 這樣格式表示每5分鐘[小時,天等]。每列之間要用空格隔開。請參考下面的列子:
58 12 * * * /apps/bin/task.sh
每天12:58運作腳本task.sh
59 23 1,10,20 * * /apps/bin/backup.sh
每月1,10,20日的23:59分運作腳本backup.sh
30 12 * * 6,0 /bin/find -name "log" -exec rm {} \;
每個周六周日的12:30執行指令
0,30 18-23 * * * /apps/bin/check.sh
每天的18點到23點,每隔30分鐘執行腳本check.sh
*/3 * * * * /apps/bin/mysqlmonitor >> /tmp/mysqlmonitor.log
每3分鐘執行腳本
了解了crontab檔案格式的意義,我們開始介紹怎麼使用crontab
1、建立crontab檔案
a:建立作業内容檔案
[[email protected] ~]$ cat > mycron
*/2 * * * * /bin/echo `date` > /dev/console
輸入上面的内容,然後摁ctrl+d儲存檔案mycron
b:送出作業檔案mycron
crontab mycron
2、列出crontab檔案内容
crontab -l
3、删除crontab檔案
crontab -r
3、編輯crontab檔案
crontab -e
怎麼備份crontab檔案。每個使用者的crontab檔案預設儲存在/var/spool/cron/<username> 檔案中。加入的你的使用者名devw,那麼你的crontab檔案就是/var/spool/cron/devw 你直接備份該檔案即可,當然要有足夠的權限。
當然如果想運作crontab,需要先安裝crontab開啟crond服務,下面介紹下,怎麼安裝crontab及對crond服務進行管理:
安裝
yum install vixie-cron
yum install crontabs
備注:vixie-cron軟體包是cron的主程式,crontabs軟體包是用來安裝、卸裝、或列舉用來驅動 cron 守護程序的表格的程式。
檢視crond服務狀态
service crond status
啟動crond服務
service crond start
關閉crond服務
service crond stop
重新開機crond服務
service crond restart
重新crond載入配置
service crond reload
把crond加入開機自動啟動
chkconfig --level 35 crond on
檢視crond是否設定開啟啟動,可以執行指令:ntsysv
當然,對于非root使用者,安裝完軟體,啟動好服務,設定好crontab檔案,并不一定能啟動計劃任務,為什麼呢?缺少權限。
cron通過/etc/cron.allow和/etc/cron.deny來允許或禁止使用者擁有自己的crontab檔案。root使用者可以建立、編輯或删除這些檔案。這些檔案中的條目是使用者登入名,每行一個名稱。
怎麼通過這兩個檔案進行權限界定的呢?如果以下一個條件成立,使用者将不能使用crontab指令:
cron.allow檔案和cron.deny檔案不存在(隻允許root使用者)。
cron.allow檔案存在,但使用者的登入名并不列在其中。
cron.deny檔案存在,并且使用者的登入名列在其中。
提醒,如果cron.allow和cron.deny中使用者名都存在,則使用者具有運作權限。cron.allow的優先級比cron.deny高
如果想讓腳本以某個user身份執行,要用到su,大緻如下:
*/5 * * * * su -c '/home/ossh/bin/crontab/dealFail.php' - ossh