Centos7 設置定時任務


Centos7 設置定時任務

在centos上最常用的定時任務應該就是crontab了,在經過各種度娘之后有三種方式實現定時任務的方法,但是所用到的場景有所不同

at    適合僅執行一次就結束的調度命令,需要啟動一個后端的atd服務。
crontab 需要啟動一個服務crond才行,crond服務通過crontab命令實現
anacron 無法周期性執行,只能以天為周期,但有個特點,在關機狀態下未>執行的任務,下次開機時可以補上執行

這里也直講最常用的crontab,主要其他兩種我也沒看也沒測試

關於crontab和crond

用到crontab那么就一定要知道crond,crond和crontab是不可分割的,crond我的理解是一個守護進程,或者說這才是我們定時任務的核心,crontab是一個編輯或者說是管理定時任務的工具
crontab我的理解就是crond服務處於啟動狀態,這個服務會默認每分鍾去檢測是否有需要執行的定時任務,所以crond不能守護秒級定時任務。而這個任務的具體內容是通過crontab來管理的,至於具體管理方式后面繼續講

安裝

一般情況下crond、crontab是安裝好的,這里主要提一下萬一沒有crontab你別想着直接用yum去安裝crond或者crontab因為你會發現找不到包,其實定時任務的包是cronie。(這里因為我遇到了所以提一下)

yum install -y cronie

這樣就行了

關於crond和crondtab常用命令

crond常用命令

systemctl start   crond         啟動服務
systemctl stop    crond         停止服務
systemctl restart crond         重啟服務
systemctl reload  crond         重載配置文件
systemctl status  crond         查看狀態

crontab常用命令

crontab -u 		設定某個用戶的cron服務
crontab -l		顯示crontab文件(顯示已設置的定時任務)
crontab -e		編輯crontab文件(編輯定時任務)
crontab -r		刪除crontab文件(刪除定時任務)
crontab -i		刪除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

用戶的定時任務分6段,分別是:分,時,日,月,周,命令
第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,每隔五分鍾執行一次

1、直接編輯配置文件

配置文件路徑:/etc/crontab
在配置文件中,原本6個段的配置,我們需要在命令前面再加一個用戶段
即:分 時 日 月 周 用戶 命令
直接添加到最后一行即可

2、使用crontab -e 命令編輯

使用命令編輯相當於就是編輯當前用戶的任務,所以不需要加用戶字段,這里就是6段

* * * * * /home/wsj/scheduledTest.sh

3、直接編輯目標文件

進入/var/spool/cron/

如果你執行了以上兩種方式,你再進來看一下這個目錄下的文件你可能會發現一點問題
這里的文件都是以用戶名來命名的,你再打開你使用crontab -e 添加過任務的用戶文件,原來crontab -e編輯的就是這里的文件,所以我們如果需要為哪個用戶添加任務,只用編輯這個目錄下對應用戶的文件即可

4、實例

* * * * * 				每1分鍾執行一次
15,30,45 * * * * 		每小時的第15、30、45分執行
15,30 10-11 * * * 		在上午10點到11點的第15和第30分鍾執行
* */2 * * * 				每兩個小時執行一次

5、相關文件

#該文件中所列用戶不允許使用crontab命令
	/etc/cron.deny

# 該文件中所列用戶允許使用crontab命令
	/etc/cron.allow

#所有用戶crontab文件存放的目錄,以用戶名命名
	/var/spool/cron/

# crond日志文件
	/var/log/cron

個人測試中的問題

1、關於重新加載配置文件

根據網上說的修改配置文件之后需要重新加載配置文件或者重啟crond才能生效,測試過程中發現只要修改了配置文件即可生效,無需使用systemctl reload crond加載

2、crond報錯
(CRON) DEATH (can't lock /var/run/crond.pid, otherpid may be 8138): Resource temporarily unavailable

解決的各種姿勢

1、殺掉所有crond進程,然后重啟crond服務
2、檢查你寫的配置文件是否有錯

如果以上兩條你都做了,還是不行,兄弟,自求多福,我無能為力(反正我是因為配置文件卡死的)


免責聲明!

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



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