在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
每分鐘執行腳本
相關閱讀:
Linux Crontab 安裝使用詳細說明 http://www.linuxidc.com/Linux/2011-08/41428.htm
Linux 下的crontab命令相關知識 http://www.linuxidc.com/Linux/2008-02/11311.htm
Linux中關於crontab的日志存放 http://www.linuxidc.com/Linux/2008-06/13568.htm
了解了crontab文件格式的意義,我們開始介紹怎麼使用crontab
1、創建crontab文件
a:創建作業內容文件
[root@localhost ~]$ 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高