Centos7 利用crontab定時執行任務及配置方法


crond是什么?

crond 和crontab是不可分割的。crontab是一個命令,常見於Unix和類Unix的操作系統之中,用於設置周期性被執行的指令。該命令從標准輸入設備讀取指令,並將其存放於“crontab”文件中,以供之后讀取和執行。該詞來源於希臘語chronos(χρόνος),原意是時間。

而crond正是它的守護進程。cron服務是一個定時執行的服務,可以通過crontab 命令添加或者編輯需要定時執行的任務。

linux定時任務分為兩種

1)系統自身輪訓的任務,比如定時(5天或者一周)備份/var/log/message等日志文件(系統的定時任務一般分為七段或者八段(centos6以下),以空格分割)

系統輪訓的配置文件/etc/logrotate.conf  (centos7以下的在/etc/cron.daily/logrotate/logrotate.conf )

2)用戶執行的定時任務(用戶的定時任務一般分為六段)

at適合執行一次就結束的調度任務

anacrontab適合於非7*24小時開機的服務器准備的,是以天為單位執行的,不能指定以分鍾的定時任務,在停機期間沒有任務執行,可以開機時執行。

cron服務是Linux的內置服務,但它不會開機自動啟動,可以每分鍾執行任務。可以用以下命令啟動和停止服務:

/bin/systemctl start crond
/bin/systemctl stop crond
/bin/systemctl restart crond
/bin/systemctl reload crond
/bin/systemctl status crond

以上1-5行分別為啟動、停止、重啟服務和重新加載配置、查看服務狀態

把cron設為在開機的時候自動啟動

vi /etc/rc.local

/bin/systemctl start crond.service

crontab操作

crontab -u //設定某個用戶的cron服務
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除某個用戶的cron服務
crontab -e //編輯某個用戶的cron服務
crontab -i //打印提示,輸入yes等確認信息

/var/spool/cron/root (以用戶命名的文件) 是所有默認存放定時任務的文件
/etc/cron.deny 該文件中所列出用戶不允許使用crontab命令
/etc/cron.allow 該文件中所列出用戶允許使用crontab命令,且優先級高於/etc/cron.deny

/var/log/cron    該文件存放cron服務的日志

基本格式

# 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
定時任務的每段為:分,時,日,月,周,用戶,命令
第1列表示分鍾1~59 每分鍾用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令

*:表示任意時間都,實際上就是“每”的意思。可以代表00-23小時或者00-12每月或者00-59分
-:表示區間,是一個范圍,00 17-19 * * * cmd,就是每天17,18,19點的整點執行命令
,:是分割時段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21點的半點時刻執行命令
/n:表示分割,可以看成除法,*/5 * * * * cmd,每隔五分鍾執行一次

基本使用

crontab -l -u root       #查看root用戶
0 */1 * * * command
0 */2 * * * command
crontab -e                  #編輯定時任務,在編寫時會檢查語法,而echo,或者vi編輯配置時不會檢查(visudo也會檢查語法)
0 */1 * * * command
0 */2 * * * command

crontab文件的一些例子:
1)30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重啟apache。
2)45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重啟apache。
3)10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重啟apache。
4)0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之間每隔30分鍾重啟apache。最后一次的任務執行時間為23:30

5)0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重啟apache。

6)* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小時重啟apache(錯誤的)
*代表每分鍾就執行一次,上面的語句的意思為每隔一小時的每分鍾都在執行重啟apache

*/60 * * * * #每60分鍾即每小時執行一次
*/105 * * * * #每105分鍾執行一次

7)* 23,00-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11點到早上7點之間,每隔一小時重啟apache(錯誤的)

上面的定時任務的分鍾為*號,代表每分鍾都在執行,表示晚上23點和凌晨0-7點之間每隔一小時的每分鍾都在再行重啟apache

8)0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4號與每周一到周三的11點重啟apache(周和日盡量不要同時使用)
9)0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一號的4點重啟apache

鏈接參考

其他

root可以創建普通用戶cron計划任務   crontab -e -u wgp 

crond不能守護秒級定時任務,通常秒級的定時任務需要自己寫shell腳本

#!/bin/bash
whith true
do
    echo "hello world!" >>/tmp/log.txt
    sleep 1        
done

sh test.sh &   放到后台執行

tail -f /tmp/log.txt 查看文件變化

在編輯里面要加上注釋來區分是誰編寫的
00 09,14 * * 6,0 /bin/bash /server/scripts/test.sh >/dev/null 2>&1 
每周六,日的上午九點和下午14點執行test.sh,並把標准錯誤2和標准輸出1定位到空文件
*/1 * * * * echo + >>/tmp/log.log  >/dev/null 2>&1
注意:定時規則如果是命令在已經有了一個重定向符號>>,再加上一個重定向
/dev/null 2>&1,是沒有結果的
命令放定時任務里面,時間的%必需要轉義\%
cron服務的日志文件在/var/log/cron文件下

要注意環境變量給定時任務帶來的影響,特別是與java服務相關的變量,定時任務只能識別很少的系統變量,同時也要避免不必要的命令打印輸出
Quartz可以實現秒級任務

crond編輯三種定時方式

第一種:在/etc/crontab下設置,指定用戶名的 (不專業寫法,一般不寫在這里面)
1、vim命令進入/etc/crontab
2、在最后一行加上
59 23 * * * root /root/catalina.out.rm/rm_8080_8081_catalina.sh
如下說明:
3、重啟crontab,使配置生效
/bin/systemctl restart crond.service
 
第二種直接用crontab -e,不需要指定用戶,如果是root權限,默認是root定時的
1、crontab -e進入
2、:wq退出保存
3、查看上面那個腳本是否有執行權限
4、還要看腳本里面的涉及的操作文件是否有權限
5、重啟crontab,使配置生效
/bin/systemctl restart  crond.service
 
第三種直接寫入/var/spool/cron/root(是用戶名稱)
1.vi  /var/spool/cron/root

2.保存退出,crontab -l

3.tail -f /tmp/log.log

 

crontab定時任務執行不成功

1.查看定時任務有沒有開啟
2.符號*號是否弄懂,是否寫錯,代表每一分鍾,小時,日,月,周
3.執行權限等等
4.執行的腳本或者寫入文件的目錄是否存在,是否是絕對路徑
5.是否有系統變量,定時任務對系統變量的識別很少,比如寫個tomcat定時關機,手工ok,但是腳本就是不執行
6.命令放定時任務里面,時間的%必需要轉義\%
7.多看定時任務日志
8.企業故障案例一(https://www.cnblogs.com/p0st/p/9720120.html)
 
windows定時任務
所有程序->附件->系統工具->計划任務程序
郵件單擊【任務計划程序庫】->【創建基本任務】

 


 

 
 
 
 
 
 


免責聲明!

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



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