天天看點

【cron & anacron 】

 ===== cron 計劃任務 =====

計劃任務主要是作一些周期性的任務,目前最主要的用途是備份資料

[[email protected] ~]# ps aux |grep cron |grep -v 'grep'

root      3078  0.0  0.0   5632  1108 ?        Ss   08:44   0:00 crond

[[email protected] ~]# chkconfig crond --list

crond           0:關閉  1:關閉  2:啟用  3:啟用  4:啟用  5:啟用  6:關閉

crond程序每分鐘檢查一次,以運作相應的任務

crond日志檔案/var/log/cron

==系統級的計劃任務 

更新whatis資料庫,日志輪轉,/tmp,/var/tmp清理

# vim /etc/crontab

01 * * * * root run-parts /etc/cron.hourly   //run-parts 後面是目錄

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

[[email protected] ~]# ls /etc/cron.hourly/

[[email protected] ~]# ls /etc/cron.daily/   //下面都是一些腳本程式

0anacron   cups       makewhatis.cron  prelink  rpm

0logwatch  logrotate  mlocate.cron     rhsmd    tmpwatch

[[email protected] ~]# ls /etc/cron.weekly/

0anacron  99-raid-check  makewhatis.cron

[[email protected] ~]# ls /etc/cron.monthly/

0anacron

=============使用者級的計劃任務==========

[[email protected] ~]# crontab -e          //建立計劃任務

* * * * * /bin/ls

[[email protected] ~]# crontab -l          //檢視計劃任務

* * * * * /bin/ls

[[email protected] ~]# ls /var/spool/cron/     以各自使用者名字定義的計劃任務

root

[[email protected] ~]# cat /var/spool/cron/root

* * * * * /bin/ls

時間表:

*          *            *         *      *

分          時          日          月          周

0-59     0-23     1-31     1-12     1-7          0,7表示周日

*      *     *     *     *     指令(絕對路徑),腳本,目錄    

*      *     *     *     * /bin/date >/date.txt     2>/dev/null

*      *     *     *     *     /bin/date &>/dev/null

*      *     *     *     *     /bin/date

====================================

00 02 * * * ls          //每天2:00整

00 02 1 * * ls       //每月1号2:00整

00 02 14 2 * ls          //每年2月14号2:00整

00 02 * * 7 ls       //每周日2:00整

00 02 14 2 7 ls      //每年2月14号2:00整  或者  每周日2:00整,這兩個時間都執行

===============================================================

00 02 * * * ls          //每天2:00整

* 02 * * * ls          //每天2:00中的每一分鐘

* * * * * ls          //每分鐘執行ls

* * 14 2 * ls          //2月14号的每分鐘

===============================================================

*/5 * * * * ls          //每隔5分鐘

00 02 1,5,8 * * ls     //每月1,5,8号的2:00整

00 02 1-8 * * ls     //每月1到8号的2:00整

RHEL5:

[[email protected] ~]# service crond restart

停止 crond:                                               [确定]

啟動 crond:                                               [确定]

[[email protected] ~]# tail /var/log/cron    //檢視日志

0 2 * * * touch /home/`date +%F`-file    失敗的,最好把指令放到腳本中,減少出錯率

練習:備份etc目錄

要求:

1. 每天4:00備份etc目錄到/var/back

2. 将備份指令寫在腳本中,如/root/back.sh  加執行權限

3. 每天備份的檔案名包含當天的日期,如2012-11-09.etc.tar.gz

4. 計劃任務執行時,螢幕不産生任何輸出 &>/dev/null

5. 隻保留最近5天的備份 find /var/back -mtime +5 -exec rm -rf {} \;

date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

date -s 14:00   //修改時間

date 110814002012   //修改日期,格式:月日時分年.秒

[[email protected] ~]# vim /root/back.sh

tar -czf /var/back/`date +%F`.etc.tar.gz /etc   //将/etc目錄打包壓縮成/var/back/以日期命名的tar.gz包

find /var/back -mtime +5 -exec rm -rf {} \;

[[email protected] ~]# chmod a+x back.sh

測試腳本:

date 110814002012   //修改時間

[[email protected] ~]# /root/back.sh

date 110914002012

[[email protected] ~]# /root/back.sh

[[email protected] ~]# crontab -e        //編輯計劃任務,将腳本也寫進去

0 4 * * * /root/back.sh &>/dev/null    //為了不在終端上輸出任何資訊

[[email protected] ~]# crontab -l         //檢視計劃任務

0 4 * * * /root/back.sh &>/dev/null

[[email protected] ~]# service crond restart

=== =anacron ====這個是“撿漏的”,就是出看每天的計劃任務有沒有執行,執行了就算了,沒執行就按照延時時間去執行

# vim /etc/anacrontab

1             65      cron.daily              run-parts /etc/cron.daily

7             70      cron.weekly            run-parts /etc/cron.weekly

30           75      cron.monthly         run-parts /etc/cron.monthly

執行頻率  延時     描述                    執行的任務

每隔10秒執行指令date

* * * * * date >/dev/pts/1

* * * * * sleep 10; date >/dev/pts/1

* * * * * sleep 20; date >/dev/pts/1

* * * * * sleep 30; date >/dev/pts/1

* * * * * sleep 40; date >/dev/pts/1

* * * * * sleep 50; date >/dev/pts/1

=======将我的筆記每天備份到/home,覆寫===

[[email protected] home]# crontab  -e

crontab: installing new crontab

1 55 20 * * * /bin/cp -rf  /root/laoshi/  /home/      //每天的早上和晚上都備份一下

2 30 09  * * * /bin/cp -rf  /root/laoshi/  /home/

[[email protected] home]# service crond restart

停止 crond:                                               [确定]

啟動 crond:                                               [确定]

[email protected] home]# chkconfig  crond  on