crontab命令

 

. Crontab 介紹
 
    如果發現您的系統裏沒有這個命令,請安裝下面兩個軟件包.
      vixie-cron
      crontabs
 
       crontab 是用來讓使用者在固定時間或固定間隔執行程序之用,換句話說,也就是類似使用者的時程表。-u user 是指設定指定 user 的時程表,這個前提是你必須要有其權限(比如說是 root)才能夠指定他人的時程表。如果不使用 -u user 的話,就是表示設定自己的時程表。 
[root@localhost test]# ps -ef |grep cron
root      3751     1 0 07:34 ?        00:00:00 crond
root     22726 12292 0 14:25 pts/2    00:00:00 grep cron
 
crond將定時執行你的命令。
 
1.1 /etc/crontab 文件
    在/etc目錄下有一個crontab文件,這裏存放有系統運行的一些調度程序。每個用戶可以建立自己的調度crontab。
   
如:
[root@dave ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
 
1.2 /etc/cron.deny 和 /etc/cron.allow 文件
 
/etc/cron.deny 表示不能使用crontab 命令的用戶
/etc/cron.allow 表示能使用crontab的用戶。
 
如果兩個文件同時存在,那麼/etc/cron.allow 優先。
如果兩個文件都不存在,那麼只有超級用戶可以安排作業。
 
 
每個用戶都會生成一個自己的crontab 文件。這些文件在/var/spool/cron目錄下:
 
如:
[root@dave ~]# cd /var/spool/cron
[root@dave cron]# ls
oracle root
 
我們直接查看這個文件,裏面的內容和對應用戶顯示的crontab -l 一致。
[root@dave cron]# cat oracle
00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1
[root@dave cron]# cat root
0 12 * * * /root/bin/sync-clock.sh
[root@dave cron]#
 
 
二. Crontab 使用說明
 
2.1 Crontab語法
使用方式 :
usage: crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)
        -s      (selinux context)
 
 2.2 Crontab 格式說明
    [root@localhost test]# crontab –e //將會用VI打開一個編輯文檔。
   
   添加的命令必須以如下格式:
   *  *  *  *  *  command 
  分  時  日  月  周     命令
   
    前五個字段可以取整數值,指定何時開始工作,第六個域是字符串,即命令字段,其中包括了crontab調度執行的命令。 各個字段之間用spaces和tabs分割。
 
前5個字段分別表示:
    分鐘:0-59
    小時:1-23
    日期:1-31
    月份:1-12
    星期:0-6(0表示週日)
 
還可以用一些特殊符號:
    *: 表示任何時刻
    ,: 表示分割
  -:表示一個段,如第二端裏: 1-5,就表示1到5點
    /n : 表示每個n的單位執行一次,如第二段裏,*/1, 就表示每隔1個小時執行一次命令。也可以寫成1-23/1.
 
 
示例:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重啓apache。
 
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重啓apache。
 
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每週六、週日的1 : 10重啓apache。 
 
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啓apache。
 
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每隔5分鐘重啓apache
 
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重啓apache。
 
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小時重啓apache
 
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11點到早上7點之間,每隔一小時重啓apache
 
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4號與每週一到週三的11點重啓apache
 
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一號的4點重啓apache
 
2.3 & 後臺執行命令
 
    當在前臺運行某個作業時,終端被該作業佔據;而在後臺運行作業時,它不會佔據終端。可以使用&命令把作業放到後臺執行。
 
    如:
    30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &
 
    在後臺運行作業時要當心:需要用戶交互的命令不要放在後臺執行,因爲這樣你的機器就會在那裏傻等。
    不過,作業在後臺運行一樣會將結果輸出到屏幕上,干擾你的工作。如果放在後臺運行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:
    如:
       command >out.file 2>&1 &
 
    在這個例子中,2>&1表示所有的標準輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件中。
 
2.4 2>&1 含義
 
先看一個例子:
0 2 * * * /u01/test.sh >/dev/null 2>&1 &
 
這句話的意思就是在後臺執行這條命令,並將錯誤輸出2重定向到標準輸出1,然後將標準輸出1全部放到/dev/null 文件,也就是清空。
 
在這裏有有幾個數字的意思:
    0表示鍵盤輸入
    1表示標準輸出
    2表示錯誤輸出.
 
 
我們也可以這樣寫:
0 2 * * * /u01/test.sh >/u01/out.file & --這裏沒寫,默認是1
0 2 * * * /u01/test.sh 1>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 &
 
將tesh.sh 命令輸出重定向到out.file, 即輸出內容不打印到屏幕上,而是輸出到out.file文件中。
 
2>&1 是將錯誤輸出重定向到標準輸出。 然後將標準輸入重定向到文件out.file。
&1 表示的是文件描述1,表示標準輸出,如果這裏少了&就成了數字1,就表示重定向到文件1。
 
2.5 2>&1寫在後面的原因
    格式:command > file 2>&1   == command 1> file 2>&1
 
    首先是command > file將標準輸出重定向到file中, 2>&1 是標準錯誤拷貝了標準輸出,也就是同樣被重定向到file中,最終結果就是標準輸出和錯誤都被重定向到file中。
 
如果改成: command 2>&1 >file
    2>&1 標準錯誤拷貝了標準輸出的行爲,但此時標準輸出還是在終端(時間A)。>file 後輸出才被重定向到file(時間B),但標準錯誤仍然保持在終端。
(可以理解爲A B是兩個不同的時間段,那終端上的內容是不一樣的。)
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章