Linux下定時任務 - crontab(資源)

crontab介紹

        crond 是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務相似,當安裝完成操做系統後,默認會安裝此服務 工具,而且會自動啓動crond進程,crond進程每分鐘會按期檢查是否有要執行的任務,若是有要執行的任務,則自動執行該任務。html

      經過crontab命令,咱們能夠在固定的間隔時間執行指定的系統指令或shell script腳本。時間間隔的單位能夠是分鐘、小時、日、月、周及以上的任意組合。  java

Linux任務調度的工做主要分爲兩類:

       系統執行的工做:系統週期性所要執行的工做,如備份系統數據、清理緩存。 我的執行的工做:某個用戶按期要作的工做,例如每隔10分鐘檢查郵件服務器是否有更新,這些工做能夠由每一個用戶自行設置。我設置的是每週一到週五定時發送郵件。python

        系統級任務調度主要完成系統的一些維護操做,用戶級任務調度主要完成用戶自定義的一些任務,能夠將用戶級任務調度放到系統級任務調度來完成(不建議這麼作),可是反過來卻不行,root用戶的任務調度操做能夠經過」crontab–uroot–e」來設置,也能夠將調度任務直接寫入/etc/crontab文件,須要注意的是,若是要定義一個定時重啓系統的任務,就必須將任務放到/etc/crontab文件,即便在root用戶下建立一個定時重啓系統的任務也是無效的。mysql

命令格式

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

說明:sql

  • -u user:是指設定指定user的時程表,這個前提是你必需要有其權限(好比說是root)纔可以指定他人的時程表。若是不指定user,使用crontab就會用在全局root下。
  • -e:編輯某個用戶的crontab文件內容。若是不指定用戶,則表示編輯當前用戶的crontab文件。
  • -r :刪除目前的定時服務。
  • -l :查看目前的定時服務。

週期性地執行某任務 :shell

       cron : 自身是一個不間斷運行的服務;數據庫

       anacron : cron的補充,可以實現讓cron由於各類緣由在過去的時間該執行而未執行的任務在恢復正常執行一次;apache

時程表基本格式

* * * * * command
分 時 日 月 周 命令windows

  • 第1列分鐘0~59

  • 第2列小時0~23(0表示子夜)

  • 第3列日1~31

  • 第4列月1~12

  • 第5列星期0~7(0和7表示星期天)

  • 第6列是要運行的命令

 

cron的種類 : 

    系統cron任務 : 

              /etc/crontab                 #系統cron任務所在目錄

                     分鐘    小時   天   月    周   用戶   任務

    用戶cron任務 : 

              /var/spool/cron/USERNAME                 #系統cron任務所在目錄

                     分鐘    小時   天   月    周   任務

時間的有效取值 : 

           分鐘 : 0-59

           小時 : 0-23

            天  : 1-31

            月 : 1-12

            周 : 0-7 ,0和7都表示週日           

時間通配表示 : 

           * : 對應時間的全部有效取值

                 3 * * * * 

                 3 * * * *7

                 3 * * * 6 7 

         , : 離散時間點 : 

              10,20 * * 2,5                  #週二和週五,每隔10分鐘,20分鐘執行一次

         -: 連續時間點 : 

              10,20 * * 2-5                     #週二到週五,每隔10分鐘,20分鐘執行一次

     每兩個小時執行一次 : 

              08 */2 * * *

     每兩天執行一次 :

              08  04 */2 * *

執行結果將以郵件形式發送給管理員

              */3 * * * * cat /etc/fstab &> /dev/null     

 

天天兩點,備份zabbix mysql discuz數據庫。

#crontab -e

0 2 * * * sh auto_backup_mysql.sh zabbix mysql discuz >>/tmp/backup.log 2>&1

#crontab -l

五個星號 表示 : 天、小時、日 、月、星期、

2>&1     表示 :標準輸出。

 

案例 : 

一、腳本位置:/search/odin/mailauto/sele.py
我要設置每週一到週五下午兩點執行該腳本,命令以下:

00 14 * * 1-5 python3 /search/odin/mailauto/sele.py

使用命令crontab–e,打開crontab文件,將命令保存。
以後重啓crontab服務就生效了,重啓命令:

/usr/sbinservicecrond restart

 

二、SHELL=/bin/bash

PATH=/sbin:/user/Sbin:/usr/sbin

MAILTO=root

HOME=/

 

# run-parts

01 * * * * root run-parts /etc/cron.hourly                   #每一分鐘執行的結果,反饋給……

02 4 * * * root run-parts /etc/cron.daily                       #天天4點02,將執行的結果,反饋給……

02 4 * * 0 root run-parts /etc/cron.weekly                   #每週……

02 4 1 * * root run-parts /etc/cron.monthly                   #每個月……

 

 cron的環境變量 : cron執行全部命令都去PATH環境變量指定的路徑下去找

       PATH /bin:/sbin:/user/bin:/usr/sbin

 

用戶任務的管理 : 

      crontab 命令: 

                   -l : 列出當前用戶的全部cron任務

                   -e : 編輯

                   -r : 移除全部cron任務

                   -u USERNAME : 管理其用戶的cron任務

 

1、cron服務

cron是一個linux下 的定時執行工具,能夠在無需人工干預的狀況下運行做業。

service crond start         //啓動服務
service crond stop          //關閉服務
service crond restart       //重啓服務
service crond reload        //從新載入配置
service crond status        //查看服務狀態

 

2、cron的配置文件:

/var/spool/cron/ 這個目錄下存放的是每一個用戶包括root的crontab任務,每一個任務以建立者的名字命名,好比tom建的crontab任務對應的文件就是/var/spool/cron/tom。通常一個用戶最多隻有一個crontab文件。

 

3、/etc/crontab 這個文件負責安排由系統管理員制定的維護系統以及其餘任務的crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
 

 

 # For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

 

MAILTO=root:是說,當 /etc/crontab 這個檔案中的例行性命令發生錯誤時,會將錯誤訊息或者是屏幕顯示的訊息傳給誰?因爲 root 並沒有法再用戶端收信,所以,我一般都將這個 e-mail 改爲本身的帳號,好讓我隨時瞭解系統的狀態!

01 * * * * root run-parts /etc/cron.hourly:在 #run-parts 這一行之後的命令,咱們能夠發現,五個數字後面接的是 root ,這一行表明的是『執行的級別爲root身份』固然,你也能夠將這一行改成成其餘的身份!而 run-parts表明後面接的 /etc/cron.hourly 是『一個目錄內(/etc/cron.hourly)的全部可執行文件』,也就是說,每一個小時的01分,系統會以root身份去/etc/cron.hourly這個目錄下執行全部可執行的文件!後面三行也是相似的意思!你能夠到 /etc/ 底下去看看,系統原本就預設了這4個目錄!你能夠將天天須要執行的命令直接寫到/etc/cron.daily便可,還不須要使用到crontab -e的程式!

 

4、/etc/cron.d/ 這個目錄用來存聽任何要執行的crontab文件或腳本。

Linux下的計劃任務--crontabLinux下的計劃任務--crontab

  1. MAILTO=root:是說,當 /etc/crontab 這個檔案中的例行性命令發生錯誤時,會將錯誤訊息或者是屏幕顯示的訊息傳給誰?因爲 root 並沒有法再用戶端收信,所以,我一般都將這個 e-mail 改爲本身的帳號,好讓我隨時瞭解系統的狀態!

  2. 01 * * * * root run-parts /etc/cron.hourly:在 #run-parts 這一行之後的命令,咱們能夠發現,五個數字後面接的是 root ,這一行表明的是『執行的級別爲root身份』固然,你也能夠將這一行改成成其餘的身份!而 run-parts表明後面接的 /etc/cron.hourly 是『一個目錄內(/etc/cron.hourly)的全部可執行文件』,也就是說,每一個小時的01分,系統會以root身份去/etc/cron.hourly這個目錄下執行全部可執行的文件!後面三行也是相似的意思!你能夠到 /etc/ 底下去看看,系統原本就預設了這4個目錄!你能夠將天天須要執行的命令直接寫到/etc/cron.daily便可,還不須要使用到crontab -e的程式!

 

5、權限

crontab權限問題到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法以下:
一、若是兩個文件都不存在,則只有root用戶才能使用crontab命令。
二、若是cron.allow存在但cron.deny不存在,則只有列在cron.allow文件裏的用戶才能使用crontab命令,若是root用戶也不在裏面,則root用戶也不能使用crontab。
三、若是cron.allow不存在, cron.deny存在,則只有列在cron.deny文件裏面的用戶不能使用crontab命令,其它用戶都能使用。
四、若是兩個文件都存在,則列在cron.allow文件中並且沒有列在cron.deny中的用戶可使用crontab,若是兩個文件中都有同一個用戶,以cron.allow文件裏面是否有該用戶爲準,若是cron.allow中有該用戶,則可使用crontab命令。

AIX 中 普通用戶默認都有 crontab 權限,若是要限制用戶使用 crontab ,就須要編輯/var/adm/cron/cron.deny
HP-UNIX 中默認普通用戶沒得crontab 權限 ,要想放開普通用戶的crontab 權限能夠編

 

6、建立cron腳本

第一步:寫cron腳本文件,命名爲crontest.cron。

 15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt 表示,每隔15分鐘,執行打印一次命令

 

第二步:添加定時任務。執行命令 「crontab crontest.cron」。搞定
第三步:"crontab -l" 查看定時任務是否成功或者檢測/var/spool/cron下是否生成對應cron腳本

注意:這操做是直接替換該用戶下的crontab,而不是新增

 

7、crontab用法

crontab命令用於安裝、刪除或者列出用於驅動cron後臺進程的表格。用戶把須要執行的命令序列放到crontab文件中以得到執行。
每一個用戶均可以有本身的crontab文件。/var/spool/cron下的crontab文件不能夠直接建立或者直接修改。該crontab文件是經過crontab命令建立的

在crontab文件中如何輸入須要執行的命令和時間。該文件中每行都包括六個域,其中前五個域是指定命令被執行的時間,最後一個域是要被執行的命令。
每一個域之間使用空格或者製表符分隔。格式以下:

 minute hour day-of-month month-of-year day-of-week commands

合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)

 

除了數字還有幾個個特殊的符號就是""、"/"和"-"、",",表明全部的取值範圍內的數字,"/"表明每的意思,"/5"表示每5個單位,"-"表明從某個數字到某個數字,","分開幾個離散的數字。

-l 在標準輸出上顯示當前的crontab。
-r 刪除當前的crontab文件。
-e 使用VISUAL或者EDITOR環境變量所指的編輯器編輯當前的crontab文件。當結束編輯離開時,編輯後的文件將自動安裝。

8、例子:

天天早上6點

 0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,由於cron把任何輸出都email到root的信箱了。

crontab每10秒鐘執行一次

* * * * * sleep 10; /bin/date >>/tmp/date.txt
* * * * * sleep 20; /bin/date >>/tmp/date.txt
* * * * * sleep 30; /bin/date >>/tmp/date.txt
* * * * * sleep 40; /bin/date >>/tmp/date.txt
* * * * * sleep 50; /bin/date >>/tmp/date.txt

跟蹤日誌,能夠看到是每10秒鐘執行一次。

tail -f date.txt 
Thu Mar 9 16:00:12 CST 2017
Thu Mar 9 16:00:22 CST 2017
Thu Mar 9 16:00:32 CST 2017
Thu Mar 9 16:00:42 CST 2017

每兩個小時

 0 */2 * * * echo "Have a break now." >> /tmp/test.txt

每秒鐘執行,

* * * * * sleep 1 ; /bin/date >>/tmp/date.txt 
* * * * * sleep 2 ; /bin/date >>/tmp/date.txt 
* * * * * sleep 3 ; /bin/date >>/tmp/date.txt 
* * * * * sleep 4 ; /bin/date >>/tmp/date.txt 

使用腳本運行

#!/bin/bash

step=2 #間隔的秒數,不能大於60

for (( i=0; i<60; i=(i+step) )); do
date
sleep $step
done

exit 0

使用腳本運行

#!/bin/bash

step=2 #間隔的秒數,不能大於60

for (( i=0; i<60; i=(i+step) )); do
date
sleep $step
done

exit 0

添加到crontab中

crontab -l
* * * * * sh /root/crontab.sh >> /tmp/crontab.log

查看日誌

tail -f tail -f /tmp/crontab.log

crontab -l
* * * * * sh /root/crontab.sh >> /tmp/crontab.log

 

查看日誌

tail -f tail -f /tmp/crontab.log

 

天天凌晨3:10執行全量備份

10 3 * * 0-6 /opt/soft/scripts/mysqldaiybak.sh

 

晚上11點到早上8點之間每兩個小時和早上八點

 0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt

 

每月的4號和每一個禮拜的禮拜一到禮拜三的早上11點

 0 11 4 * 1-3 command line

 

表示每晚的21:30重啓apache

30 21 * * * /usr/local/etc/rc.d/lighttpd restart 

表示每個月一、十、22日的4 : 45重啓apache。 

5 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 
 

表示每週6、週日的1 : 10重啓apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 

表示在天天18 : 00至23 : 00之間每隔30分鐘重啓apache。 

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 

 

表示在天天18 : 00至23 : 00之間每隔30分鐘重啓apache。 

0 23 * * 6 /usr/local/etc/rc.d/lighttpd 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

說明:
run-parts這個參數了,若是去掉這個參數的話,後面就能夠寫要運行的某個腳本名,而不是目錄名了

 

每一小時重啓apache 

0 */1 * * * /usr/local/etc/rc.d/lighttpd restart 

晚上11點到早上7點之間,每隔一小時重啓apache 

0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 

 

晚上11點到早上7點之間,每隔一小時重啓apache 
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 

 

每週一到週五的11:41開始,每隔10分鐘執行一次

41,51 11 * * 1-5   root /home/www.osyunwei.com/osyunwei.sh

1-59/10 12-23 * * 1-5   root /home/www.osyunwei.com/osyunwei.sh

 

在天天的10:31開始,每隔2小時重複一次

31 10-23/2 * * * root   /home/www.osyunwei.com/osyunwei.sh

每週一到週五8:00,每週一到週五9:00

0 8,9 * * 1-5  root /home/www.osyunwei.com/osyunwei.sh

 

每個月的4號與每週一到週三的11點重啓apache 

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 

 

每週一到週五9:25到11:35之間、13:00到15:00之間,每隔10分鐘運行一次

25,35,45,55  9 * * 1-5  root   /home/www.osyunwei.com/osyunwei.sh

5-59/10  10 * * 1-5  root   /home/www.osyunwei.com/osyunwei.sh

5,15,25,35  11 * * 1-5  root   /home/www.osyunwei.com/osyunwei.sh

*/10  13-15 * * 1-5  root   /home/www.osyunwei.com/osyunwei.sh

 

每週一到週五8:30、8:50、9:30、10:00、10:30、11:00、11:30、13:30、14:00、14:30、5:00分別執行一次

30,50 8 * * 1-5  root  /home/www.osyunwei.com/osyunwei.sh

30 9 * * 1-5  root  /home/www.osyunwei.com/osyunwei.sh

*/30 10-11 * * 1-5  root  /home/www.osyunwei.com/osyunwei.sh

30 13 * * 1-5  root  /home/www.osyunwei.com/osyunwei.sh

0,30 14-15 * * 1-5  root  /home/www.osyunwei.com/osyunwei.sh

 

 

在下午4 :50刪除/abc目錄下的所有子目錄和所有文件;

50 16 * * * root rm -rf /abc/* 2>&1 &

從早8:00~下午6:00每小時讀取/xyz目錄下x1文件中每行第一個域的所有數據加入到/backup目錄下的bak01.txt文件內;

)00 8-18 * * * root cat /xyz/x1|awk '{print $1}' >> /backup/bak01.txt 2>&1 &

每逢星期一下午5:50將/data目錄下的全部目錄和文件歸檔並壓縮爲文件:backup.tar.gz;

50 17 * * 1 root cd /data;tar -zcvf backup.tar.gz * 2>&1 &

 

在下午5:55將IDE接口的CD-ROM卸載(假設:CD-ROM的設備名爲hdc);

55 17 * * * root umount /hdc 2>&1 &

 

服務操做說明:

chkconfig crond on  #設爲開機啓動,先要安裝chkconfig(yum install chkconfig)

/sbin/service crond start                             //啓動服務

/sbin/service crond stop                             //關閉服務

/sbin/service crond restart                          //重啓服務

/etc/rc.d/init.d/crond restart                       #重啓

/etc/rc.d/init.d/crond reload                        #不中斷服務,從新載入配置

/sbin/service crond reload                          //從新載入配置

/sbin/service crond status                          //啓動服務

 

在早晨8:00前開機後啓動 --> 這個我不是很明白它的意思,不知道是否是8點前開機就啓動上面的設定,8點後纔開機就不用啓動的意思。姑且用下面這個命令吧。

chkconfig --level 2345 crond on

 

1月1日早上4點

 0 4 1 1 * command line SHELL=/bin/bash


PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root //若是出現錯誤,或者有數據輸出,數據做爲郵件發給這個賬號 HOME=/

每小時執行/etc/cron.hourly內的腳本

 01 * * * * root run-parts /etc/cron.hourly、

 

天天執行/etc/cron.daily內的腳本

 02 4 * * * root run-parts /etc/cron.daily

 

每星期執行/etc/cron.weekly內的腳本

 22 4 * * 0 root run-parts /etc/cron.weekly

8-22點:每2分鐘執行

7-8和23點:每10分鐘執行一次

0-6點:每1 小時執行一次

*/2 8-22 * * * root /usr/bin/python /home/abc.py >>/data/logs/abc.log
9,19,29,39,49,59 7-8,23 * * * root /usr/bin/python /home/abc.py >>/data/logs/abc.log
59 0-6 * * * root /usr/bin/python /home/abc.py >>/data/logs/abc.log
 

每個月去執行/etc/cron.monthly內的腳本

 42 4 1 * * root run-parts /etc/cron.monthly

 

注意: "run-parts"這個參數了,若是去掉這個參數的話,後面就能夠寫要運行的某個腳本名,而不是文件夾名。

天天的下午4點、5點、6點的5 min、15 min、25 min、35 min、45 min、55 min時執行命令。

 5,15,25,35,45,55 16,17,18 * * * command

 

每週一,三,五的下午3:00系統進入維護狀態,從新啓動系統。

 00 15 * * 1,3,5 shutdown -r +5

 

每小時的10分,40分執行用戶目錄下的innd/bbslin這個指令:

 10,40 * * * * innd/bbslink

 

每小時的1分執行用戶目錄下的bin/account這個指令:

 1 * * * * bin/account

 

天天早晨三點二十分執行用戶目錄下以下所示的兩個指令(每一個指令以;分隔):

 20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)

 

每一年的一月和四月,4號到9號的3點12分和3點55分執行/bin/rm -f expire.1st這個指令:

 12,55 3 4-9 1,4 * /bin/rm -f expire.1st

 

每週末的凌晨一點鐘執行一次系統的raid-check

0 1 * * Sun root /usr/sbin/raid-check

 

天天的4:02am分root用戶執行/etc/cron.daily目錄下的全部腳本,run-parts參數表示執行後面目錄中的全部腳本。

02 4 * * * root run-parts /etc/cron.daily

 

天天的8-18每四小時,dodmaster用戶執行hislogclear.sh腳本,即8:44,12:44,16:44,20:44四個時間點,會執行該腳本。

[21:57:56][dodmaster@mha3 ~]$ crontab -l
44 8-20/4 * * * $HOME/.DailyShell/hislogclear.sh

 

每五分鐘執行一次

*/5 * * * * echo "every five minute to do it" >> time.txt

  

每一個工做日下午八點執行

0 20 * * 1-5 echo "every workday 20:00 to do it" >> time.txt

 

每分鐘的30秒時執行,由於cron服務是每分鐘被喚醒一次,因此要執行精確到秒的任務須要藉助sleep命令。

* * * * * sleep 30; echo "every minute 30 second to do it" >> time.txt

 

每20秒執行一次,即表示在每分鐘的0秒、20秒、40秒各執行一次(也能夠是其餘的步長是20秒的值,例如:5s、25s、45s)

* * * * * echo "every 20 second to do it" >> time.txt
* * * * * sleep 20; echo "every 20 second to do it" >> time.txt
* * * * * sleep 40; echo "every 20 second to do it" >> time.txt

 

使用案例  : 

一、配置本機每隔兩天在凌晨3點20備份一次/etc目錄,備份文件存放至/backup/etc/目錄,文件名稱如 : etc-2012-06-20.tar.bz2;

答  : 

20 3 */2 * *   cp /etc/ etc-2012-06-20.tar.bz2;                         #

 

二、CentOS系統時間與UTC時間不一致的解決方法

CentOS Linux中終端命令中執行如下命令:

一、vi /etc/sysconfig/clock   #編輯時間配置文件

     ZONE="Asia/Shanghai"
     UTC=false                          #設置爲false,硬件時鐘不於utc時間一致
     ARC=false

二、ln -sf /usr/share/zoneinfo/Asia/Shanghai    /etc/localtime    #linux的時區設置爲上海時區

三、ntpdate 192.43.244.18    #對準時間

若是沒有安裝ntp服務器,剛須要先執行如下命令:

yum install ntp #安裝ntp服務器

 

四、/sbin/hwclock --systohc   #設置硬件時間和系統時間一致並校準

好了,咱們的CentOS linux系統時間和計算機硬件時間終於都是cst時間了,而且都是上海時區,終因而正常啦。

 

五、在 11 月分內,天天的早上 6 點到 12 點中,每隔 2 小時執行一次/usr/bin/httpd.sh 怎麼
實現
0 6-12/2 * 11 * /usr/bin/httpd.sh

 

六、有一普通用戶想在每週日凌晨零點零分按期備份/user/backup 到/tmp 目錄下,該用
戶應如何作?
參考答案:(1)第一種方法:
用戶應使用 crontab –e 命令建立 crontab 文件。格式以下:
0 0 * * sun cp –r /user/backup /tmp
(2)第二種方法:
用戶先在本身目錄下新建文件 file,文件內容以下:
0 * * sun cp –r /user/backup /tmp
而後執行 crontab file 使生效。

 

七、系統管理員需天天作必定的重複工做,請按照下列要求,編制一個解決 方案 :
(1)在下午 4 :50 刪除/abc 目錄下的所有子目錄和所有文件;
(2)從早 8:00~下午 6:00 每小時讀取/xyz 目錄下 x1 文件中每行第一個域的所有數據
加入到/backup 目錄下的 bak01.txt 文件內;
(3)每逢星期一下午 5:50 將/data 目錄下的全部目錄和文件歸檔並壓縮爲文件:
backup.tar.gz;
(4)在下午 5:55 將 IDE 接口的 CD-ROM 卸載(假設:CD-ROM 的設備名爲 hdc);
(5)在早晨 8:00 前開機後啓動。
參考答案:
解決方案:
(1)、用 vi 建立編輯一個名爲 prgx 的 crontab 文件;
prgx 文件的內容:
50 16 * * * rm -r /abc/*
(2)、0 8-18/1 * * * cut -f1 /xyz/x1 >;>; /backup/bak01.txt
(3)、50 17 * * * tar zcvf backup.tar.gz /data
(4)、55 17 * * * umount /dev/hdc
(5)、由超級用戶登陸,用 crontab 執行 prgx 文件中的內容:
root@xxx:#crontab prgx;在每日早晨 8:00 以前開機後便可自動啓動 crontab

 

八、crontab異常未執行緣由

近期碰到個問題,服務器上線後,crontab都發生異常沒有自動執行,查看了下日誌,發現問題:

Apr 16 11:26:01 imysql.cn crond[28354]: (*system*) BAD FILE MODE (/etc/cron.d/flushhost)
Apr 16 11:26:01 imysql.cn crond[28354]: (root) BAD FILE MODE (cron/root)

檢查了下 /etc/cron.d/ 目錄下的其餘文件,發現 flushhost 的屬性是 755,其餘的則是 644,因而將這個腳本屬性也改爲644,問題解決。

另外,還同時修改了mysql安裝包的install.sh腳本,新服安裝完畢後,修改flushhost腳本的屬性爲644。

這個問題貌似只在個別版本的RHEL下碰到過,並非全部的版本都有。

 

九、設置任務計劃

/home/www.osyunwei.com/osyunwei.sh              #要自動執行的腳本程序路徑

chmod +x /home/www.osyunwei.com/osyunwei.sh   #對腳本文件添加執行權限,不然不能執行

vi /etc/crontab                 #編輯配置文件,在最後一行添加內容

30 1 * * * root /home/www.osyunwei.com/osyunwei.sh              #表示天天凌晨1點30執行備份

:wq!          #保存退出

/etc/rc.d/init.d/crond restart       #重啓

 

十、保證在shelll腳本中提供全部必要的路徑和環境變量,除了一些自動設置的全局。

1)腳本中涉及文件路徑時寫全局路徑;

2)腳本執行要用到java或其餘環境變量時,經過source命令引入環境變量,如:

cat start_cbp.sh

#!/bin/sh

source /etc/profile

export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

/usr/local/jboss-4.0.5/bin/run.sh -c mev &

3)當手動執行腳本OK,可是crontab死活不執行時。這時必須大膽懷疑是環境變量惹的禍,並能夠嘗試在crontab中直接引入環境變量解決問題。如:

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

注意清理系統用戶的郵件日誌
每條任務調度執行完畢,系統都會將任務輸出信息經過電子郵件的形式發送給當前系統用戶,這樣日積月累,日誌信息會很是大,可能會影響系統的正常運行,所以,將每條任務進行重定向處理很是重要。

例如,能夠在crontab文件中設置以下形式,忽略日誌輸出:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

「/dev/null 2>&1」表示先將標準輸出重定向到/dev/null,而後將標準錯誤重定向到標準輸出,因爲標準輸出已經重定向到了/dev/null,所以標準錯誤也會重定向到/dev/null,這樣日誌輸出問題就解決了。

 

十一、

 

十二、

 

1三、

 

1四、

 

1五、

 

1六、

 

1七、

 

1八、

 

1九、

 

20、

 

2一、

 

2二、

 

2三、

 

 

2四、

 

2五、

 

 

 

連接 : 

Centos下crontab指定執行用戶  : https://www.jb51.net/os/RedHat/517715.html

CentOS下如何實行計劃任務?CentOS下實行計劃任務的方法 : https://www.jb51.net/os/RedHat/517610.html

Linux下使用crontab定時備份MYSQL數據庫   :  https://www.jianshu.com/p/c32e53d2cd2d

Linux之crontab定時任務   :  https://www.jianshu.com/p/838db0269fd0

linux使用find和crontab命令按期清理過時文件 : https://www.jb51.net/article/100538.htm

相關文章
相關標籤/搜索