CentOS 定時計划任務設置


一、安裝crontab服務並設置開機自啟

yum install crontabs  (centos默認就會帶,一般不需要安裝)
systemctl enable crond (設為開機啟動)
systemctl start crond(啟動crond服務)
systemctl status crond (查看狀態)

二、設置用戶自定義定時任務

定時任務有兩種配置方式:
1、在/etc/crontab下設置,需要指定用戶名。
2、直接用crontab -e,不需要指定用戶名。

vim /etc/crontab
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # 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這個變量,那么crontab會將stdout的內容以郵件的形式發送到MAILTO定義的郵箱中。(MAILTO=myuser@163.com

  分鍾(0-59) 小時(0-23) 日(1-31) 月(11-12) 星期(0-6,0表示周日) 用戶名 要執行的命令

示例:

vim /etc/crontab
# 每天,每5分鍾執行一次時間同步 */5 * * * * /usr/sbin/ntpdate ntp.aliyun.com > /dev/null 2>&1
# 每天凌晨二點,執行命令腳本,這里由於第一個的分鍾沒有設置,那么就會每天凌晨2點的每分鍾都執行一次命令
* 2 * * * root /data/myshell.sh

# 每天凌晨二點整執行一次命令腳本
0 2 * * * root /data/myshell.sh

# 每天11點到13點之間,每10分鍾執行一次命令腳本
*/10 11-13 * * * root /data/myshell.sh

# 每小時的10-30分鍾,每分鍾執行一次命令腳本,共執行20次
10-30 * * * * root /data/myshell.sh

# 每小時的10,30分鍾,分別執行一次命令腳本,共執行2次
10,30 * * * * * root /data/myshell.sh

# 周一到周五每天的9點到14點,每5min執行一次python腳本
*/5 9-14 * * 1-5 /root/gold.py

# 周一到周五的15點到15點35分,每5min執行一次python腳本
0-35/5 15 * * 1-5 /root/gold.py

# 每周6晚上23點執行一次腳本
0 23 * * 6 root /bin/bash /opt/scripts/config-backup/configbackup.sh > /dev/null 2>&1

注意:
crond的計划任務並不會調用用戶設置的環境變量,在執行計划任務時,用的時crond自己的環境變量,所以有些腳本手工執行是可以的,但是計划任務就不行,此時要么寫腳本的絕對路徑,要么將環境便倆個添加到/etc/crontab中;

遇到的問題:

# */5 9-14 * * 1-5 root /usr/local/python3/bin/python3 /root/gold.py
這種寫法雖然腳本能執行成功,但是cron的執行日志中會有相關的報錯,看着很不爽,於是就有了下面這種寫法;
# */5 9-14 * * 1-5 /root/gold.py 這種寫法有一個前提,需要指定執行腳本的解釋器,也就是"#!/usr/local/python3/bin/python3";
不知道是不是我是root的緣故,當在cron中加入執行用戶root時,腳本能執行成功,但是cron的執行日志中仍然會報錯,於是就干脆取消了,不知道普通用戶狀態下會不會出現這種問題;(測試系統:CentOS 7.7)

三、保存生效

# 加載任務使其生效
crontab /etc/crontab (每一次的改動都需要執行,否則不生效)

# 查看任務
crontab -l

# 直接編輯
crontab -e      (或者直接vim /etc/crontab)
注意:如果第一次寫計划任務直接執行crontab -e,則計划任務文件是保存在/tmp目錄下的,關機重啟會失效;所以推薦"vim /etc/crontab";

 四、/var/log/cron無日志輸出解決辦法

  有時候會遇到/var/log/cron下是空白或者不記錄日志的情況,通常可以嘗試重啟下crond服務(systemctl restart crond.service)和rsyslog(systemctl restart rsyslog)服務。如果還是沒有日志輸出,就需要去看/etc/rsyslog.conf配置文件,是否禁止輸出cron日志,修改成正確的格式之后,保存並重啟crond服務和rsyslog服務。

https://tooltt.com/crontab/c/34.html  # 一個很好的學習計划任務的網站


免責聲明!

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



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