
image.png
訪問控制
- 白名單 若存在
/etc/cron.allow
,只有該文件內的用戶才能使用crontab - 黑名單 若存在
/etc/deny
,該文件內的用戶不能使用crontab - 優先級
/etc/cron.allow
>/etc/cron.deny
常用選項
- -e: 編輯任務
- -l: 顯示所有任務
- -r: 刪除當前用戶的所有crontab任務
服務管理
$ systemctl status crond # 查看服務狀態
● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2019-02-18 01:32:37 CST; 13h ago Main PID: 1598 (crond) CGroup: /system.slice/crond.service └─1598 /usr/sbin/crond -n $ sudo systemctl start crond # 啟動服務 $ sudo systemctl stop crond # 停止服務
根據cron的日志實時查看執行情況
$ sudo tail -f /var/log/cron
時間選項說明
五個*號
crontab 由 五個 * 定義任務的執行時間,具體含義為:
*號 |
含義 |
范圍 |
---|---|---|
第1個 |
1小時中的第幾分鍾 |
0-59 |
第2個 |
1天中的第幾小時 |
0-23 |
第3個 |
1個月中的第幾天 |
1-31 |
第4個 |
1年中的第幾月 |
1-12 |
第5個 |
1周中的星期幾 |
0-7(0和7都代表星期日) |
特殊符號
-
- 表示任何時間,如第1個 * 表示1小時中的每分鍾都執行一次
- , 表示不連續時間,如
0 8,12,16 * * *
表示每天的8點0分,12點0分,16點0分執行一次命令 -
- 表示連續的時間范圍,如
0 5 * * 1-6
,表示周一至周六的凌晨5點0分執行命令
- 表示連續的時間范圍,如
具體示例
45 22 * * *
22點45分執行0 17 * * 1
每周一的17點0分執行0 5 1,15 * *
每月1號和15號的凌晨5點0分執行40 4 * * 1-5
每周一至周五的凌晨4點40分執行
注意:星期幾與幾號不要同時出現
0 0 1,15 * 1
表示的是:每月1號和15號的0點0分執行,每周一的0點0分執行。兩者是或的關系,但不要有這種寫法,很容易產生歧義
系統的定時任務
crontab -e
表示每個用戶以自己的身份執行自己的定時任務。除此之外,還可以通過/etc/crontab
這個配置文件指定任務
用系統配置的方式執行定時任務,有兩種方式:
- 第一種:將需要定時執行的腳本放到 `/etc/cron.{daily,weekly,monthly}/目錄中
$ ls /etc | grep cron anacrontab cron.d cron.daily cron.deny cron.hourly cron.monthly crontab cron.weekly
$ sudo cat /etc/anacrontab # 用於管理 # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=3-22 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
- 第二種:修改
/etc/crontab
配置文件
$ cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin # 由此可知,crontab是有自己的環境變量的,因此在crontab中要用絕對路徑,shell中的PATH與crontab的PATH不一定相同 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
實際應用中,一般直接使用
crontab -e
的方式來處理更加常見