天天看點

Linux crontab指令小結

在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

繼續閱讀