crontab命令


crontab命令被用來提交和管理用戶的需要周期性執行的任務,與windows下的計划任務類似,當安裝完成操作系統后,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鍾會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

語法:

crontab [ -u user ] file 或 crontab [ -u user ] { -l | -r | -e }

 

說明:

crontab 是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是類似使用者的時程表。

-u user 是指設定指定 user 的時程表,這個前提是你必須要有其權限(比如說是 root)才能夠指定他人的時程表。如果不使用 -u user 的話,就是表示設定自己的時程表。

 

參數:

-e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的文字編輯器,則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(比如說 setenv VISUAL joe)
-r : 刪除目前的時程表
-l : 列出目前的時程表
-u<用戶名稱>:指定要設定計時器的用戶名稱。

 

crontab文件的含義:用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段,格式如下:

minute   hour   day   month   week   command     順序:分 時 日 月 周
其中:
minute: 表示分鍾,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
day:表示日期,可以是從1到31之間的任何整數。
month:表示月份,可以是從1到12之間的任何整數。
week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。
command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。

在以上各個字段中,還可以使用以下特殊字符:
星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件后每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表范圍,例如,“1,2,5,7,8,9”
中杠(-):可以用整數之間的中杠表示一個整數范圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鍾執行一次。

例子:
f1 f2 f3 f4 f5 program
其中 f1 是表示分鍾,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執行的程序。
當 f1 為 * 時表示每分鍾都要執行 program,f2 為 * 時表示每小時都要執行程序,其餘類推
當 f1 為 a-b 時表示從第 a 分鍾到第 b 分鍾這段時間內要執行,f2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
當 f1 為 */n 時表示每 n 分鍾個時間間隔執行一次,f2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推
當 f1 為 a, b, c,… 時表示第 a, b, c,… 分鍾要執行,f2 為 a, b, c,… 時表示第 a, b, c…個小時要執行,其餘類推
使用者也可以將所有的設定先存放在文件中,用 crontab file 的方式來設定時程表。

 

crond服務

/sbin/service crond start    //啟動服務
/sbin/service crond stop     //關閉服務
/sbin/service crond restart  //重啟服務
/sbin/service crond reload   //重新載入配置

 查看crontab服務狀態:

service crond status

 手動啟動crontab服務:

service crond start

 查看crontab服務是否已設置為開機啟動,執行命令:

ntsysv

 加入開機自動啟動:

chkconfig –level 35 crond on

 

實例:

每1分鍾執行一次command
* * * * * command

每小時的第3和第15分鍾執行
3,15 * * * * command

在上午8點到11點的第3和第15分鍾執行
3,15 8-11 * * * command

每隔兩天的上午8點到11點的第3和第15分鍾執行
3,15 8-11 */2 * * command

每個星期一的上午8點到11點的第3和第15分鍾執行
3,15 8-11 * * 1 command

每晚的21:30重啟smb 
30 21 * * * /etc/init.d/smb restart

每月1、10、22日的4 : 45重啟smb 
45 4 1,10,22 * * /etc/init.d/smb restart

每周六、周日的1:10重啟smb
10 1 * * 6,0 /etc/init.d/smb restart

每天18 : 00至23 : 00之間每隔30分鍾重啟smb 
0,30 18-23 * * * /etc/init.d/smb restart

每星期六的晚上11:00 pm重啟smb 
0 23 * * 6 /etc/init.d/smb restart

每一小時重啟smb 
* */1 * * * /etc/init.d/smb restart

晚上11點到早上7點之間,每隔一小時重啟smb
* 23-7/1 * * * /etc/init.d/smb restart

每月的4號與每周一到周三的11點重啟smb 
0 11 4 * mon-wed /etc/init.d/smb restart

一月一號的4點重啟smb
0 4 1 jan * /etc/init.d/smb restart

每小時執行/etc/cron.hourly目錄內的腳本
01 * * * * root run-parts /etc/cron.hourly

每月每天每小時的第 0 分鍾執行一次 /bin/ls
0 7 * * * /bin/ls

在 12 月內, 每天的早上 6 點到 12 點中,每隔 20 分鍾執行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信給 alex@domain.name
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata

每月每天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分….執行 echo “haha”
20 0-23/2 * * * echo "haha"

下面再看看幾個具體的例子:
0 */2 * * * /sbin/service httpd restart  意思是每兩個小時重啟一次apache 
50 7 * * * /sbin/service sshd start  意思是每天7:50開啟ssh服務 
50 22 * * * /sbin/service sshd stop  意思是每天22:50關閉ssh服務 
0 0 1,15 * * fsck /home  每月1號和15號檢查/home 磁盤 
1 * * * * /home/bruce/backup  每小時的第一分執行 /home/bruce/backup這個文件 
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  每周一至周五3點鍾,在目錄/home中,查找文件名為*.xxx的文件,並刪除4天前的文件。
30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30執行一次ls命令

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM