1. 程式人生 > >CentOS crontab 定時任務不執行的常見解決方法

CentOS crontab 定時任務不執行的常見解決方法

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .—————- 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 
# |  |  |  |  |

m h dom mon dow command
# *  *  *  *  *  command will be executed

例如:

*/5 * * * * root /usr/libexec/atrun

minutem      :  代表一小時內的第幾分,範圍 0-59。 
hour    h       :  代表一天中的第幾小時,範圍 0-23。 
mday  dom  :  代表一個月中的第幾天,範圍 1-31。 
monthmon  :   代表一年中第幾個月,範圍 1-12。 
wday  dow  :   代表星期幾,範圍 0-7 (0及7都是星期天)。 
who                    :   

要使用什麼身份執行該指令,當您使用 crontab -e 時,不必加此欄位。 
commandcommand所要執行的指令。 

crond 開機啟動

crond 啟動/關閉指令碼

/etc/init.d/crond help
Usage: /etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}

crond 加入到開機啟動

chkconfig --level 2345 crond on

crontab定時任務不執行問題

排查原因步驟如下:

首先,確認伺服器是否開啟定時任務計劃服務,只有root使用者才能對crond服務進行開啟和關閉

[[email protected] script]# service crond status
crond is stopped
[[email protected] script]# service crond start
Starting crond:                                            [  OK  ]
[[email protected] script]# 
service crond status
crond (pid  24577) is running…

請確保crond狀態為 is running… 

如果crond狀態為 crond is stopped ,則定時任務服務不會生效故無法執行,我遇到的crontab不執行就是這個原因

crontab 常見錯誤的幾個問題

編輯 crontab :
crontab -e

(指定bash是非常有效的解決方式,我今天碰到這個問題,死活執行不起來,後臺除錯過程中添加了這一句就解決了)

# minute hour  day month week   command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh

Ctrl + O (寫入)——》 Enter鍵(儲存檔名)——》 Ctrl + X(退出) 

輸入檢視命令:

crontab -l

# m h  dom mon dow   command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh
推薦用此方式

如果遇到shell語法錯誤

解決方法:

需指定shell直譯器命令:SHELL=/bin/bash(請參見上面 crontab編輯示例 SHELL=/bin/bash

如果遇到路徑錯誤

在 /var/spool/crontab/yanggang 中,添加了如下命令,在日誌檔案 /var/spool/mail/yanggang 中提示找不到 xxx.sh 路徑

30 * * * *  /home/barry/top800/top10/top10_fruits/top10_all.sh

30 * * * * bash /home/barry/top800/top10/top10_fruits/top10_all.sh

這是因為你在crontab中使用了絕對路徑執行指令碼 top10_all.sh,因此在指令碼 top10_all.sh 中引用的其它指令碼也都需要使用絕對路徑,才能被crontab找到並執行。

那麼該如何避免絕對路徑呢,推薦採用如下格式:

30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh推薦用此方式

先進入該目錄,然後在執行指令碼;否則,執行指令碼中的其它指令碼都需要加絕對路徑

一些示例:

00 8,12,16 * * * /data/app/scripts/monitor/df.sh

30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh

10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh

10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh

10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh

43 21 * * * 21:43 執行

15 05 * * *  05:15 執行

0 17 * * * 17:00 執行

0 17 * * 1 每週一的 17:00 執行

0,10 17 * * 0,2,3 每週日,週二,週三的 17:00 17:10 執行

0-10 17 1 * * 毎月1日從 17:007:10 毎隔1分鐘 執行

0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 執行

42 4 1 * *   毎月1日的 4:42 執行

0 21 * * 1-6 週一到週六 21:00 執行

0,10,20,30,40,50 * * * * 每隔10 執行

*/10 * * * *  每隔10 執行

* 1 * * * 1:01:59 每隔1分鐘 執行

0 1 * * * 1:00 執行

0 */1 * * * 毎時0 每隔1小時 執行

0 * * * * 毎時0 每隔1小時 執行

2 8-20/3 * * *8:02,11:02,14:02,17:02,20:02 執行

30 5 1,15 * * 1  15日的 5:30 執行

2.3  & 後臺執行命令

當在前臺執行某個作業時,終端被該作業佔據;而在後臺執行作業時,它不會佔據終端。可以使用&命令把作業放到後臺執行。

如:

       30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &

在後臺執行作業時要當心:需要使用者互動的命令不要放在後臺執行,因為這樣你的機器就會在那裡傻等。

不過,作業在後臺執行一樣會將結果輸出到螢幕上,干擾你的工作。如果放在後臺執行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個檔案中:

如:

              command >out.file 2>&1 &

在這個例子中,2>&1表示所有的標準輸出和錯誤輸出都將被重定向到一個叫做out.file 的檔案中。

crontab不執行的原因解析

Posted by 破冰 on 2013-8-25 13:40 Sunday

1.Cron的啟動與關閉

由於Cron是Linux的內建服務,可以用以下的方法啟動.關閉這個服務:

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

2.Cron配置檔案

2.1全域性配置檔案

crontab在/etc目錄下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五個目錄和crontab,cron.deny二個檔案.

cron.daily是每天執行一次的job,cron.weekly是每個星期執行一次的job.cron.monthly是每月執行一次的job,cron.hourly是每個小時執行一次的job.cron.d是系統自動定期需要做的任務,但是又不是按小時,按天,按星期,按月來執行的,那麼就放在這個目錄下面.

/etc/crontab檔案一般如下:

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

我們可在此檔案中新增自己需要的cron job.

/etc/cron.deny檔案就是用於控制不讓哪些使用者使用Crontab的功能.

2.2使用者配置檔案

每個使用者都有自己的cron配置檔案,通過crontab -e 就可以編輯,一般情況下我們編輯好使用者的cron配置檔案儲存退出後,系統會自動就存放於/var/spool/cron/目錄中,檔案以使用者名稱命名.

linux的cron服務是每隔一分鐘去讀取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的內容.

3.Cron命令格式

crontab [ -u user ] 檔案 
crontab [ -u user ] { -l | -r | -e }

-u:指定某一使用者

-e:執行文字編輯器來設定使用者(當前使用者或指定使用者)時程表,內定的文字編輯器是vi.
-r:刪除使用者時程表.
-l:列出使用者時程表.

4.Cron檔案格式

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

第1列表示分鐘1~59, 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要執行的命令

5.Cron檔案使用說明

5.1 一般情況

當f1 為 * 時表示每分鐘都要執行 program,f2 為 * 時表示每小時都要執行程式,其餘類推. 

* * * * * /bin/usershell  每天每分鐘執行一次/bin/usershell
當f1 為 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,f2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推.

0-12 * * * * /bin/usershell  每天每小時從0到12分鐘每分鐘執行一次/bin/usershell
當f1 為 */n 時表示每 n 分鐘個時間間隔執行一次,f2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推.

* */2 * * * /bin/usershell  每天每2小時執行一次/bin/usershell
當f1 為 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,f2 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推.

* 1,3,5,7 * * * /bin/usershell  每天每逢1,3,4,7點執行一次/bin/usershell

5.2. 衝突邏輯

日期可以用月限定,也可以用“星期”指定,如果兩個段有衝突,那麼,第六段的命令將在匹配任何一個的情況下都執行,比如

"30 4 1,15 * 5",將在每月的1號和15號加每個週五,上午4:30執行.

5.3. 符號"%"

"%"在Cron檔案中,有"結束命令列","換行","重定向"的作用,假如不需要"%"的特殊作用,需要使用轉義符轉義.

5.4. @reboot

這個不需要理解,為了達到在開機後執行,且只執行一次的目的.除了這個,也無法通過前五段的設定來實現.

@annually也是這個功能.

至於@yearly,@monthly等等其實都可以用上面的五段來設定.


相關推薦

CentOS crontab定時任務執行解決

crontab 配置檔案 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # .—————- minute (0 – 59)  # |  .————- hour (0 – 23)

CentOS crontab 定時任務執行常見解決方法

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # .—————- minute (0 – 59)  # |  .————- hour (0 – 23) # |  |  .———- day of month (1

crontab定時任務執行解決辦法

1、檢視crontab執行記錄如果出現了crontab定時任務不執行的情況,首先需要定位問題,那麼就需要通過日誌來確定問題所在。crontab的日誌位置一般位於/var/log/cron,利用下面的語句即可檢視日誌。1 tail -f /var/log/cron上面的/var

crontab定時任務執行,並且沒有收到錯誤資訊郵件

現象:     crontab中定義的msqldump定時任務不能執行,沒有收到錯誤資訊郵件,檢視日誌/var/log/cron顯示如下 CROND[15777]: (root) MAIL (mai

crontab定時任務執行

今天在Liunx系統裡面寫了一個定時重啟tomcat的.sh指令碼檔案,單獨執行這個.sh檔案可以正常執行,但是加入到Liunx的定時任務crontab裡面發現根本就不執行,於是就逐步排查問題? 1、

crontab定時任務執行的原因

我在網上找的時候發現網上主要說了這5個原因: 1 crond服務未啟動 crontab不是Linux核心的功能,而是依賴一個crond服務,這個服務可以啟動當然也可以停止。如果停止了就無法執行任何定時任務了,解決的方法是開啟它: crond 或 service

Spring定時任務執行解決

本以為spring定時任務挺簡單的,後來發現單純的進行檔案的配置有的時候定時任務並沒有執行,這是什麼原因呢? 通過看spring指導文件上的講解,以及通過對文件的理解做了一個Demo看一下,再說明這個

crontab定時任務執行,單獨執行sh生效

在網上找了一個定時重啟tomcat的指令碼,自己手動執行是可以的,但就是加入crontab後不執行。 重啟指令碼如下 restart_tomcat.sh #!/bin/bash tomcat_home=/usr/local/tomcat8 SHUTDO

查詢日誌報錯Spoon is not supported on this hosttype解決crontab定時任務執行解決

背景:kettle換目標庫後,手動執行命令可以入庫,crontab定時任務未執行,查錯記錄: ①先看了定時任務crontab配置    結果沒問題; ②重啟了crontab定時任務  service crond restart  也沒用 ③查看了配置檔案及資源庫路徑

解決ubuntu下定時任務執行問題

1、首先建立一個定時任務:每分鐘向螢幕輸出"Hello world!"。 有兩種實現方式: 1)輸入crontab -e命令,根據提示直接在當前cron task文字最後面插入如下命令(記得回車): * * * * * echo "Hello world!" 2)由於每個使

CentOS Crontab(定時任務)

status stat ntsysv 設置 backup pda 啟動服務 brush 分鐘 安裝crontab: yum install crontabs 說明: service crond start //啟動服務 service crond stop //關閉服務 s

linux crontab定時任務執行

在遇到這次問題之前,我已經多次使用了定時任務,這次也正常設定了定時任務,但是死活發現定時任務沒有執行。 crontab設定如下:   bg_action_report.sh內容如下: #!/bin/sh #date=`date +%Y%m%d` #filePath

Linux普通使用者設定Crontab定時任務執行(親測有效)

Crontab命令及用法我這裡就不多做解釋了,直接從設定Crontab開始。**在root使用者下執行**1.安裝crontab:使用命令:yum install crontabs**在普通使用者下執行

shell指令碼手動執行成功,定時任務呼叫失敗的解決方法

場景:寫的shell指令碼,在secureCRT 命令視窗執行沒有問題,當新增定時任務執行shell指令碼時出現如下中的某些問題。1,出現找不著 命令如:java、db2等命令。 2,編碼格式不對等,如java讀取中文文字 讀取後為問號? 。 原因:使用者的環境變數在she

關於ThinkJs 的Crontab定時任務無法執行的問題

在這個問題上糾結了老半天,同樣的Action方法,我放在這個Controller中無法執行,放在另一個Controller中卻可以,甚至我複製這個可行的Controller重新命名都不行,莫非建立Controller需要在哪個檔案中宣告?在群裡問了也不需要。最後的最後,經技術負責人點撥,是許

ubuntu開啟crontab日誌及執行常見原因

crontab不執行常見原因 1,先排查你要執行的指令碼是否正常執行,驗證方法就是在控制檯輸入你要執行的指令碼命令,看是否能執行,但是即使有時能正常執行,也不一定說指令碼就沒問題。今天我就遇到了一個很奇怪的現象,我的指令碼命令沒使用全路徑,在控制檯是可以正常執行,但是cro

叢集伺服器定時任務重複執行解決方案

伺服器採用了負載均衡,有兩臺伺服器,部署的程式碼一樣,所以裡面的定時任務在某一時間會被同時執行,這就導致了很多其他意外的發生,想要解決的問題基本就三個:單點執行,故障轉移,服務狀態。這裡對比一下網上找的幾種方案,: (1)只在一臺伺服器上部署該定時任務程式碼。 優點:解決

linux定時任務執行的問題

1、如果定時任務出錯,會有郵件傳送:less /var/spool/mail/akazam看了郵件基本可以解決大部分問題2、定時任務執行jar的時候會存在找不到Java的問題export JAVA_HOME=/home/akazam/app/jdk1.8.0_131expor

KindEditor.ready 執行解決方法

問題描述 按照官網的要求,一一都設定好了,但就是沒法顯示富文字編輯器。 1.設定好textarea輸入框 <textarea id="myEditor" name="content" style="width:700px;height:300px;"> &lt;strong&

iOS 關於preferredStatusBarStyle執行解決方法

如果你使用了系統的UINavigationController,且它的navigationBar沒有被隱藏的話,它的rootController及之後push的controller的preferredStatusBarStyle方法不會被呼叫(其他兩個方法還是會被呼叫);U