Linux中Cron任務間隔執行:每隔幾分鍾/幾小時/幾天


一、配置

  1)全局用戶配置文件(/etc/crontab)

  直接VI等編輯就可以。

  2)個人用戶配置(臨時配置)

  

  加任務:
    crontab -e
    0 */1 * * * command
    0 */2 * * * command
  查詢任務是否加了:
    crontab -l
    0 */1 * * * command
    0 */2 * * * command 

 

二、配置格式

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

相關參數詳細說明:

星號(*)可以用來代表所有有效的值。譬如,月份值中的星號意味着在滿足其它制約條件后每月都執行該命令。
整數間的短線(-)指定一個整數范圍。譬如,1-4 意味着整數 1、2、3、4。
用逗號(,)隔開的一系列值指定一個列表。譬如,3, 4, 6, 8 標明這四個指定的整數。

正斜線(/)可以用來指定間隔頻率。在范圍后加上 /<integer> 意味着在范圍內可以跳過 integer。譬如,0-59/2 可以用來在分鍾字段定義每兩分鍾。間隔頻率值還可以和星號一起使用。例如,*/3 的值可以用在月份字段中表示每三個月運行一次任務。

開頭為井號(#)的行是注釋,不會被處理。

三、配置實例

 

#每隔1個小時執行一次 ls

0 */1 * * * ls 

 

#每隔2個小時執行一次 ls 

0 */2 * * * ls 

 

#每隔3個小時執行一次 ls 

0 */3 * * * ls 

 

#每隔4個小時執行一次 ls 

0 */4 * * * ls

  

#每隔10天執行一次 ls 

0 0 */10 * * ls

 

#每天1點執行 ls 

0 1 * * * ls

 

出處:https://blog.csdn.net/hot_vc/article/details/48261195

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

cron 表達式 1小時30分鍾,(90分鍾或100分鍾)執行一次

注:不涉及日歷(不指定某月\天(周幾)等),比如定時任務的需求:間隔 多少秒/分/時( 每隔99秒,每隔100分鍾執行等)

 

每隔90分鍾執行一次 
    90*2= 180 = 3個小時
   需要添加2個cron,間隔3小時

表達式:
cron1 0 30 1/3 * * ?   (1.30,4.30,7.30,,,,)
cron2 0 0  0/3 * * ?   (3.00,6.00,9.00,,,,)

每隔100分鍾

    100*3= 300 = 5個小時 
    需要添加3個cron,間隔5小時;

cron1 0 40 1/5 * * ?   (1.40,6.40,11.40,,,)
cron2 0 20 3/5 * * ?   (3.20,8.20,13.20,,,,)
cron2 0 0  5/5 * * ?   (5.00,10.00,15.00)

每隔2個半小時執行一次 
    150*2= 300 = 5個小時
   需要添加2個cron,間隔5小時

表達式:
cron1 0 30 2/5 * * ?   (2.30,7.30,12.30,,,,)
cron2 0 0  0/5 * * ?   (5.00,10.00,15.00,,,,)

 

受其他博文啟發,一個定時任務實現不了,那這個任務,就添加多個觸發時間,來實現;

需求1:從0點開始,每隔2個半小時,執行一次
思路記錄:
 1.先列出,我們預期的執行時間:

       2.30,5.00,7.30,10.00,12.30,15:00

2.找規律:我們知道間隔 整數(1,2,3,,,)個小時的cron表達式;根據此前提,找間隔 整數個小時 時間的規律

3.規律結果

(2.30,7.30,12.30,,,,)       兩點半開始,間隔5小時    那么此表達式==>0 30 2/5 * * ?

(5.00,10.00,15.00,,,,)      0點開始,間隔5小時        那么此表達式==> 0  0/5 * * ?

需求2:在指定時間t后,啟動定時任務a,

      可以采用:.再添加一個執行定時任務,動態添加那要求任務a,在那指定的時間t開始執行一次,有且只調用一次

總結:間隔 n 個小時,執行一次

              1.找出n和60的最小公倍數:gbs;

              2.gbs除60=間隔時間tt       (tt<23?)

             3.gbs除n=cron表達式個數

附加表達式在線測試網站:  http://cron.qqe2.com/

注意:粘貼我們自己寫的表達cron表達式,查看運行結果時,得核對一下表達式是否被修改;我就遇到  0/3 變===>0-3

 


原文鏈接:https://blog.csdn.net/weixin_38981413/java/article/details/103755671

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

詳細講解定時任務cronie

1.定時任務的作用#

  1. 類似生活中的手機鬧鍾
  2. 可以自動完成操作命令(自動清理磁盤,自動同步時間)
  3. 定時備份系統數據信息(有些公司重要數據文件需要每天人流少的時間進行數據備份)
    案例:
    /var/log/secure是記錄用戶登錄系統情況的數據文件,萬一有黑客惡意破解登錄你的服務器,會產生大量登錄失敗的數據保存這個文件中。當文件數據量大的時候,再查看文件內容會出現刷屏的現象。
    解決方法:日志文件需要定期進行數據分割出來

Linux定時軟件

  1. cronie 實現定時任務功能(重點)
  2. atd 實現定時任務功能 只能一次設置定時功能
  3. anacron 實現定時任務功能 應用非7*24小時的家用電腦

安裝定時任務:yum install -y cronie

查詢cronie服務需要關注配置文件

Copy
[root @zouxuan ~ ]# rpm -ql cronie
/etc/cron.d
/etc/cron.d/0hourly
/etc/cron.deny			# 關注文件
/etc/pam.d/crond
/etc/sysconfig/crond
/usr/bin/crontab		# 用戶設置定時任務查看命令
/usr/lib/systemd/system/crond.service
/usr/sbin/crond

2.系統定時任務目錄#

系統定時任務周期:每小時 控制定時任務目錄:/etc/cron.hourly 按照每小時
系統定時任務周期:每一天 控制定時任務目錄:/etc/cron.daily 按照一天的00:00-23:59
系統定時任務周期:每一周 控制定時任務目錄:/etc/cron.weekly 按照一周7天
系統定時任務周期:每個月 控制定時任務目錄:/etc/cron.monthly 按照每月的天數30 28 31

如何利用系統定時任務目錄進行定時操作?

Copy
第一步:編寫定時任務腳本
[root @zouxuan /share ]# vim hour_echo.sh  
#每小時向/date/oldboy.txt追加信息
echo "oldboy" >> /date/oldboy.txt

第二步:由於是系統自帶定時目錄,需要給腳本賦予執行權限
[root @zouxuan /share ]# chmod u+x hour_echo.sh 
[root @zouxuan /share ]# ll hour_echo.sh
-rwxr--r--. 1 root root 76 7月  29 17:25 hour_echo.sh

第三步:移動到對應執行周期目錄
[root @zouxuan /share ]# mv hour_echo.sh  /etc/cron.hourly/
說明:每一小時,系統自動執行腳本

3.crontab命令說明#

1.查看用戶定時任務 crontab -l (list) 列表查看用戶的設置的定時任務 相當於查看/var/spool/cron目錄

Copy
[root @zouxuan /etc/cron.daily ]# crontab -l
no crontab for root
# 說明:此時沒有設置定時任務

2.用戶編寫定時任務 crontab -e (edit)
說明:crontab -e 編寫定時任務配置信息
visuod 對普通用戶授權 相當於編輯 vim /etc/sudoers
crontab -e 編寫定時任務 相當於編寫 vim /var/spool/cron目錄下的用戶定時任務文件
root用戶設置定時任務配置文件 /var/spool/cron/root
xuan用戶設置定時任務配置文件 /var/spool/cron/xuan

4.定時任務實際編寫#

1.編寫前環境檢查

Copy
a. 確定定時任務服務是否運行
[root @zouxuan ~ ]# ps -ef | grep crond
root        936      1  0 09:25 ?        00:00:00 /usr/sbin/crond -n
root       2150   2006  0 16:15 pts/0    00:00:00 grep --color=auto crond


b. 確定定時任務服務是否開機啟動
[root @zouxuan ~ ]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2020-07-28 09:25:51 CST; 6h ago
 Main PID: 936 (crond)
   CGroup: /system.slice/crond.service
​           └─936 /usr/sbin/crond -n
7月 28 09:25:51 zouxuan systemd[1]: Started Command Scheduler.
7月 28 09:25:52 zouxuan crond[936]: (CRON) INFO (RANDOM_DELAY will be scaled with f...d.)
7月 28 09:25:53 zouxuan crond[936]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.

2.編寫定時任務信息說明

編寫定時任務方法:crontab -e

crontab -e編寫定時任務作用

1.可以檢查定時任務編寫語法是否有誤

2.crontab命令簡單,方便記憶

系統定時任務編輯樣板文件:/etc/crontab

Copy
# 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

編寫定時任務格式

*** * * * * 具體執行的操作**

第一個星號表示:每分鍾做什么操作

第二個星號表示:每小時做什么操作,按照24小時制時間計算

第三個星號表示:每月第幾號做什么操作。

第四個星號表示:第哪個月做什么操作,按照1-12月

第五個星號表示:每星期幾做什么操作,按照外國的0-6,星期日為0,星期一為1,星期六為6

1.按照數值表示時間信息

00 02 * * * 備份數據 說明:表示每天的凌晨2點整備份數據

2.按照特殊符號表示時間信息

* * * * * 備份數據 說明:表示全天每分鍾進行進行備份 PS:定時任務最短執行時間是每分鍾

*/5 */5 * * * 備份數據 說明:每隔5小時的每5分鍾備份數據

3.定義連續時間內連續備份數據

01-03 03 * * * 備份數據 說明:表示每天的凌晨2點01分到2點03分連續備份數據(3次)

4.指定不連續時間備份數據

00 14,20 * * * 備份數據 說明:逗號表示每天的14點和20點備份數據

編寫定時任務格式總結

1.在編寫時間信息的時候,如果想表示每隔什么時間執行任務,建議:/上面盡量使用*表示,不要寫具體數值

2.編寫時間信息盡量從左到右依次書寫

3.編寫定時任務,日期信息不要和星期信息同屬出現

3.實際的編寫定時任務

需求:每隔2分鍾把/xuan/xuan.txt文件數據備份到/date目錄下

Copy
# 第一步:編寫定時任務的時間信息 
*/2	*	*	*	*
 # 第二步:備份數據命令 
cp  /xuan/xuan.txt /date
 # 第三步:編寫定時任務文件 crontab -e
[root @zouxuan ~ ]# crontab -e
*/2 * * * * cp /xuan/xuan.txt /date

5.定時任務排除方法#

1.檢查是否有該用戶的定時任務配置文件

Copy
[root @zouxuan /xuan ]# ll /var/spool/cron/root
-rw-------. 1 root root 36 7月  28 18:44 /var/spool/cron/root
 # 查看定時任務配置信息
[root @zouxuan /xuan ]# cat /var/spool/cron/root
*/2 * * * * cp /xuan/xuan.txt /date
 # 命令查看定時任務
[root @zouxuan /xuan ]# crontab -l
*/2 * * * * cp /xuan/xuan.txt /date

2.查看定時任務的日志文件信息,查找錯誤

Copy
[root @zouxuan ~ ]# tail /var/log/cron -f
Jul 28 18:58:12 	zouxuan 		crontab[2333]: 	(root) **BEGIN** EDIT (root)				
# begin 表示開始編寫定時任務

Jul 28 18:58:37 	zouxuan 		crontab[2333]: 	(root) **REPLACE** (root)				
# replace 表示編輯修改定時任務

Jul 28 18:58:37 	zouxuan 		crontab[2333]: 	(root) **END** EDIT (root)				
# end 表示結束編輯定時任務

Jul 28 18:54:01 	zouxuan 		crond[936]: 	(root) **RELOAD** (/var/spool/cron/root)	
# reload 表示重新加載定時任務

Jul 28 19:00:01 	zouxuan 		CROND[2337]:	(root) **CMD** (cp /xuan/xuan.txt /date)	
# cmd 表示執行定時任務

Jul 28 18:57:36 	zouxuan 		crontab[2330]: 	(root) **LIST** (root)					
# list 表示使用 crontab -l 查看定時任務

日志文件顯示信息

第一列 執行時間信息

第二列 執行定時任務的主機名

第三列 crontab 表示編寫定時任務 crond 表示重新加載定時任務文件 CROND 表示執行定時任務

第四列 顯示以什么用戶編輯或執行定時任務/干了什么事情

6.定時任務編寫總結#

1.編寫口訣:什么時間做什么,然后再想下一次什么時候執行 什么時間,做什么事情

定時任務書寫例子

每天的上午8點30分,來學校上車(go to school) 30 08 * * * go to school

每天晚上12點准時,回家自己上床(go to bed) 00 12 * * * go to bed

編寫定時任務格式總結
1.在編寫時間信息的時候,如果想表示每隔什么時間執行任務,建議:/上面盡量使用*表示,不要寫具體數值
2.編寫時間信息盡量從左到右依次書寫
3.編寫定時任務,日期信息不要和星期信息同屬出現

2.編寫定時任務執行命令規范

  1. 測試定時執行命令 定時任務執行的命令進行絕對路徑

  2. 編寫定時任務信息 定時任務編寫時需要按照語法規范 先編寫注釋信息,再編寫定時任務 crontab -e

  3. 檢查定時任務效果

    1. 查看定時任務日志 /var/log/cron
    2. 查看定時任務效果 先臨時修改定時任務每分鍾,再最終修改定時任務的時間
  4. 排查定時任務問題

    1. 查看定時任務日志
    2. 查看定時任務效果

3.編寫定時任務執行腳本規范

  1. 測試定時執行腳本 定時任務執行的腳本利用絕對路徑 /bin/sh shell.sh

  2. 編寫定時任務信息 定時任務編寫時需要按照語法規范 編寫注釋信息 編寫定時任務

  3. 檢查定時任務效果

    1. 查看定時任務日志 /var/log/cron
    2. 查看定時任務效果 先臨時修改定時任務每分鍾,再最終修改定時任務的時間
  4. 排查定時任務問題

    1. 查看定時任務日志
    2. 查看定時任務效果

 

出處:https://www.cnblogs.com/xuanxuan360/p/13398587.html

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

Debian的定時執行命令Crontab

Debian的定時執行命令Crontab,這個相當於Windows的計划任務

    想要讓Debian定時執行命令就得靠crontab了!
    它的功能類似微軟的計划任務,可以在您設定的時間執行你想要的命令。
    通過編寫設定文件可以組合出復雜的執行時段,讓命令的執行更加有效率。

cron設置文件在Debian系統下的位置
   /etc/crontab

大致內容如下:

01 # /etc/crontab: system-wide crontab
02 # Unlike any other crontab you don't have to run the `crontab'
03 # command to install the new version when you edit this file.
04 # This file also has a username field, that none of the other crontabs do.
05  
06 SHELL=/bin/sh
07 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
08  
09 # m h dom mon dow user command
10 17 * * * * root run-parts --report /etc/cron.hourly
11 25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
12 47 6 * * 7 root test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
13 52 6 1 * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
14 0 20 1 * * root /usr/bin/updatedb
15 #

需要設定的是 # m h dom mon dow user command 下面的部份
由左至右相對應的意思為:

分0-59   時0-23   日1-31   月1-12   周0-7  執行命令的用戶   命令


其中比較有意思的是:周,0和7都代表星期日

而可以使用的特殊符號有

* (星號)   代表所有時間都接受 
, (逗號)   代表同一個分類可以有多少個值 
- (減號)   代表在這個時段內執行 
/n          代表每n個時間就執行一次

范例:

30 12 * * * command:   <em>每天12:30執行command</em>
0 6,12 15 * * command:<em>每月15日的6:00和12:00執行command</em>
10 8 1-15 6 * command:<em>每年6月1至15日的8:10執行command</em>
*/5 * * * 7 command:   <em>星期日每隔五分鍾執行一次command</em>

定時器語法:
就是上面計划任務的第一部分。它決定了何時執行計划任務。

它包含5部分:
  1.分鍾(0-59)
  2.小時(0-23)
  3.一個月的哪一天(1-31)
  4.一年中的哪個月(1-12)
  5.星期幾(0是星期天)

  星號  如果某個部分出現的是星號而不是數字,就是說明這個部分表示的時間全部會執行。

可能一時不太容易說清楚,再看例子吧。

示例:
   1、下面的計划任務會一直運行
        * * * * * [command]

   2、下面的計划任務會在每個小時的0分時運行(就是每小時執行一次)
        0 * * * * [command]

   3、下面依舊是一個每小時運行一次的計划任務。不過是在每個小時的一刻鍾時運行的(1:15,2:15.。。)
       15 * * * * [command]

   4、下面的計划任務每天執行一次,在2:30分
        30 2 * * * [command]

   5、下面的計划任務是在每個月2號的午夜執行(比如:2010年2月2日00:00)
        0 0 2 * * [command]

   6、下面的計划任務會在每周一的每個小時0分鍾時執行一次
        0 * * * 1 [command]

   7、下面的會每小時運行3次,在0分,10分,和20分時
        0,10,20 * * * * [command]

   8、下面是用除號“/”表示每多少運行一次。

        */5 * * * * [command]    每5分鍾運行一次

        00 */2 * * * [command]    每2小時運行一次 (* */2 * * * [command]  這種寫法是錯誤的!)

    */1 * * * * root wget -O /var/log/cron.txt http://www.592.net/test.php    每分鍾訪問網站某PHP腳本一次,檢查是否每分鍾自動運行了PHP,可以查看 var/log/cron.txt文件,看下是否有網站PHP返回的內容就可以了!

   9、還可以用“-”表示一個范圍,如下表示5到10點的每個整點運行一次
        0 5-10 * * * [command]

   10、另外還有一個特殊的時間關鍵字“@reboot”,就是每次重啟服務器時運行計划任務
        @reboot [command]

 

設定和管理計划任務
    編輯Crontab,來設定計划任務。使用下面的命令,會在vi 里打開crontab的內容以供編輯:
crontab -e

如果你只想看看,不需要編輯,可以使用以下的命令
crontab -l

要刪除crontab的內容,就是刪除所有的計划任務,可以這樣:
crontab -r

 

    cron是個linux下的定時執行工具,能在無需人工干預的情況下運行作業。由於Cron 是Linux的內置服務,但他不自動起來,能用以下的方法啟動、關閉這個服務:


編輯/etc/crontab 文件配置cron

  cron服務每分鍾不僅要讀一次 /var/spool/cron 內的所有文件,還需要讀一次 /etc/crontab,因此我們配置這個文件也能運用cron服務做一些事情。用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務。此文件的文件格式是: 
  SHELL=/bin/bash 
  PATH=/sbin:/bin:/usr/sbin:/usr/bin 
  MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號 
  HOME=/ //使用者運行的路徑,這里是根目錄 
  # run-parts 
  01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly內的腳本 
  02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的腳本 
  22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly內的腳本 
  42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly內的腳本

  大家注意"run-parts"這個參數了,如果去掉這個參數的話,后面就可以寫要運行的某個腳本名,而不是文件夾名了。


重啟命令:
Debian
    /etc/init.d/cron restart

Linux
    /etc/rc.d/init.d/crond restart

 

出處:https://www.cnblogs.com/weifeng1463/p/9155295.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM