Linux定時任務—crond,crontab

1Linux 工作排程的種類: at, crontab

種類

依賴服務

描述

at

atd

是個處理僅執行一次就結束排程的命令,不過要執行 at 時,必須要啓動 atd 這個服務

crontab

crond

這個指令所設定的工作將會循環的一直進行下去,必須要啓動 crond 這個服務。

2、使用者的設定:可以限制使用 crontab 的使用者賬號:

/etc/cron.deny

將不可使用crontab的賬號寫入其中,一個賬號一行

/etc/cron.allow

將允許的賬號寫入其中

3

 

/var/spool/cron/使用用戶

記錄用戶的crontab工作。/var/spool/cron/rootroot用戶的定時任務配置文件

/var/log/cron

記錄cron 執行的每一項工作。可以檢查有沒有***

[root@www /]# cat /var/spool/cron/root

#backup /etc/hosts/etc/rc.local by shiwei at 2016-08-17

* * * * *  /bin/sh /server/scripts/back.sh


[root@www /]# cat /var/log/cron

Aug 17 15:25:02www CROND[25845]: (root) CMD (/bin/sh /server/scripts/back.sh)

4、檢查crond服務有沒有啓動

1[root@www /]# ps-ef |grep crond|grep -v grep

root     26331     1  017:21 ?        00:00:01 crond

2[root@www /]# /etc/init.d/crond  status

crond (pid  26331)is running...

5、啓動crond服務:

/sbin/service crond start

啓動服務

/sbin/service crond stop

關閉服務

/sbin/service crond restart

重啓服務

/sbin/service crond reload

重新載入配置

6crontab命令

-eedit

編輯crontab的工作內容

-llist

查看crontab的工作內容

-rremove

移除所有的 crontab 的工作內容,若僅要移除一項,用 -e 編輯

7、定時任務指令的使用格式:

用戶的定時任務規則一般分爲6段,每個段通過空格來分隔。

** * * *  command

分時日月周

 

代表意義

分鐘

小時

日期

月份

cmd

數字範圍

0-59

0-23

1-31

1-12

0-7


注意:周的數字爲07時,都代表星期天

特殊字符

代表意義

*

星號,表示任意時間都接受,的意思

-

減號,代表一個時間段。如:17-19

逗號,分隔時段。如:30 2,3,4 * * * cmd

/n

n代表數字,即每隔n單位時間。如:*/3

例子:

130 3,12 * * * /bin/sh/scripts/oldboy.sh

每天凌晨3點和中午的12點的半點時刻執行腳本文件

20,30 18-23 * * * cmd

每天18點至23點之間每隔半小時執行命令或腳本文件

330 */6 * * * cmd

每隔6小時的半點時刻執行腳本或命令

440 5 * * 6,0 cmd

每週六,週日的5:45分執行腳本或命令

500 */2 ** * cmd   (易錯)

每隔兩小時執行腳本或命令

600 11 * 4 1-3 cmd

4月的每週一至週三的上午11點執行命令或腳本

8、系統的配置文件:/etc/crontab

[root@www /]# cat /etc/crontab

SHELL=/bin/bash<<==使用哪種shell接口

PATH=/sbin:/bin:/usr/sbin:/usr/bin<<==執行文件搜尋路徑

MAILTO=root<<== /etc/crontab中的例行性工作的指令發生錯誤時,或是該工作的執行結果有STDOUT/STDERR 時,會將錯誤訊息或是屏幕顯示的訊息傳給誰?

HOME=/<<==默認此shell的家目錄所在

系統的定時任務分爲7個段,以空格來分隔:

* *  *  *  *user-name command

9、一些注意事項:

1)資源分配不均的問題

2取消不必要的輸出項目

當有執行結果或是執行的項目中有輸出的數據時,該數據將會 mail MAILTO 設定的賬號,那麼當有一個排程一直出錯那麼你就會一直收到錯誤消息。重定向到垃圾桶(>/dev/null 2>&1

3)安全的檢驗:

很多時候被植入***都是以例行命令的方式植入的,所以可以藉由檢查/var/log/cron 的內容來視察是否有非自己設定的cron 被執行了。

4)周與日月不可同時並存:

即:不可使用【幾月幾日且爲星期幾】的寫法。

 

10、定時任務規範:

1)定時任務執行的腳本要規範路徑:如:在/server/scripts目錄下創建腳本

2)要先在命令行執行要寫到腳本里的命令,確保無誤,再把命令複製粘貼到腳本里

3)腳本里的命令要使用全路徑(可用which查詢命令全路徑)

4)使用crontab –e編輯定時任務時,要添加必要的註釋

5)定時任務命令或腳本結尾需要加>/dev/null 2>&1,清楚不必要的輸出或錯誤輸出

6)執行shell腳本任務前加/bin/sh

7)注意%放在crontab –e裏需要轉義,而在腳本里無需轉義

8)可通過crond定時任務日誌調試(/var/log/cron)定時任務

9sh –x調試腳本

 

11、通過例子實戰定時任務:

1、優化:設置linux服務器時間同步互聯網時間(NTP服務)

1)手動同步:同步阿里雲的時間服務器

[root@www /]#/usr/sbin/ntpdate ntp1.aliyun.com

18 Aug 10:56:36 ntpdate[2166]: step timeserver 182.92.12.11 offset 3.666680 sec

2)通過定時任務同步:假設每隔5分鐘做一次時間同步

[root@www /]# echo '#time sync by shiwei at2016-08-18'>>/var/spool/cron/root(添加註釋)

[root@www /]# echo'*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null2>&1'>>/var/spool/cron/root

其實就是vi /var/spool/cron/root

特別說明:定時任務命令或程序最好寫到腳本里執行

2、通過編輯腳本配置定時任務

每天晚上00:30,打包服務器配置文件/etc/rc.local, /etc/hosts,備份到/backup目錄下,每次備份按時間生成不同的備份包,並刪除5天前的備份包。

第一步:創建腳本存放的目錄:

[root@www /]# mkdir -p /server/scripts

第二步:創建備份目錄:

[root@www/]# mkdir backup

 

第三步:切換到根目錄,在命令行執行命令,確保命令正確

 

[root@www/]# cd /

[root@www/]# tar -zchf backup/bak_$(date+%F-%H-%M).tar.gz etc/hosts etc/rc.local

[root@www/]# cd backup/

[root@wwwbackup]# ll

total4

-rw-r--r--.1 root root 363 Aug 18 16:10 bak_2016-08-18-16-10.tar.gz

第四步:編輯腳本,並把複製上面執行的命令粘貼在腳本里,這樣不容易錯

[root@www/]# cd /server/scripts/

[root@wwwscripts]# vim backup.sh

cd / &&\

/bin tar -zchfbackup/bak_$(date +%F-%H:%M).tar.gz etc/hosts etc/rc.local &&\

/bin/find /backup -type f-name "*.tar.gz" -mtime +5 |xargs rm –f

第五步:測試腳本成不成功:

[root@wwwbackup]# sh /server/scripts/backup.sh

[root@wwwbackup]# ll

total4

-rw-r--r--.1 root root 363 Aug 18 16:41 bak_2016-08-18-16:41.tar.gz

 

第六步:編輯定時任務

[root@wwwscripts]# crontab –e

#file backup by shiwei at2016-08-18

30 00 * * * /bin/sh  /server/scripts/backup.sh >/dev/null2>&1

第七步:查看定時任務

[root@wwwscripts]# crontab –l

第八步:如果腳本有誤,需要調試腳本

[root@www/]# sh -x /server/scripts/backup.sh

+cd /

++date +%F-%H-%M

+/bin/tar -zchf backup/bak_2016-08-18-16:46.tar.gz etc/hosts etc/rc.local

+xargs rm -f

+/bin/find /backup -type f -name '*.tar.gz' -mtime +5

 

 


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