2021-05-12 14:32:11
Linux計劃任務 Crontab 詳解
Q:Linux下,如果想要在指定的某個時間點干點什麼事,該如何制定計劃?
A:
計劃任務,建立和管理在指定時間自動執行的任務。
注意:
要是任務計劃在指定時間自動執行,計劃任務的服務必須是啟動的。
1、使用at命令呼叫atd進程設定在某個特定的時間,執行一次性任務。
2、使用crontab命令呼叫crond進程,設定按固定的週期(如每天、每週等)重複執行預先計劃好的任務。
一、一次性計劃任務
在指定的日期、時間點自動執行預先設定的一些命令操作。
系統服務的名稱:/etc/init.d/atd
[root@localhost ~]# service atd start
[root@localhost ~]# service atd status
atd (pid 5790) is running... //確保atd系統服務啟動
[root@linuxidc mydata]# at 08:45
at> reboot //按Ctrl+D鍵提交任務
at> <EOT>
job 3 at 2017-06-09 08:45
[root@linuxidc mydata]# atq
3 2017-06-09 08:45 a root
1、設定格式
at [HH:MM] [yyyy-mm-dd]
若沒有指定年月日的,預設是當天的。
1、at [HH:MM]
2、at [HH:MM] [yyyy-mm-dd]
3、at now + 數位 [minutes|hours|days|weeks]
2、查詢當前設定的at任務列表
shell> atq 或at -l
3、刪除指定任務編號的at任務
shell> atrm 編號 #atrm=at -d
4、檢視計劃任務的具體內容
shell> at -c 任務號
5、使用檔案中的命令作為計劃任務(比較少用)
shell> at 時間 -f 檔案
1、at計劃任務檔案:/var/spool/at/a開頭的檔案,任務執行完畢,檔案消失。
2、/etc/at.deny:只有該名單裡面的人不可以使用
3、/etc/at.allow:只有該名單裡面的人可以使用
二、週期計劃任務
按照預先設定的時間週期(分鐘、小時、天……)重複執行使用者指定的命令操作。
1、crontab命令呼叫crond進程執行。
2、系統服務的名稱:/etc/init.d/crond
3、使用者定義的設定,位於檔案:/var/spool/cron/使用者名稱
4、cron服務的紀錄檔檔案:/var/log/cron
[root@localhost /]# service crond start
[root@localhost /]# service crond status
crond (pid 1935) is running...
1、cron服務組態檔:/etc/crontab
[root@linuxidc mydata]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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去自動執行的時候,盡量寫命令的絕對目錄。
crontab 只會在/sbin、/bin、/usr/sbin、/usr/bin下查詢命令,如果命令不在這些目錄中,應該要使用絕對路徑。
2、管理cron計劃任務
root使用者可以管理指定使用者的計劃任務、普通使用者只能管理自己的計劃任務
1、編輯計劃任務:crontab -e -u 使用者名稱
2、檢視計劃任務:crontab -l -u 使用者名稱
3、刪除計劃任務:crontab -r -u 使用者名稱
[root@localhost linuxidc]# crontab -e //進入編輯模式,不接使用者名稱的,預設是當前使用者
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost linuxidc]# crontab -l
50 3 2 3 * echo "123"
[root@localhost linuxidc]# crontab -r
[root@localhost linuxidc]# crontab -l
no crontab for root
3、編輯語法
通過crontab -e 進入編輯模式後,語法格式如下:
時間數值的特殊表示方法:
1、* 表示該範圍內的任意時間
2、, 表示間隔的多個不連續時間點
3、- 表示一個連續的時間範圍
4、/n 指定間隔的時間頻率
0 17 * * 1- 5 //週一到週五每天17:00
30 8 * * 1,3,5 //每週一、三、五的8點30分
0 8-18 * * * //8點到18點整
0 12 */3 * * //每隔3天的12點整
注意:
1、資源分配不均:多個計劃任務同時執行。
2、安全檢查:防止有非法計劃任務。
3、周和日、月不可同時並存:容易導致計劃任務時間混亂。
4、缺陷彌補
缺陷:cron在系統關機後不能執行計劃任務……
為週期性計劃任務cron收拾殘局的anacron程式解決該缺陷。
1、anacron程式是系統自帶的定時任務,不能替代cron
服務名稱:/etc/init.d/anacrond
服務紀錄檔:/var/spool/anacron
服務組態檔:/etc/anacrontab
2、會每個小時被執行一次,指令碼在/etc/cron.hourly
3、按天、周或月為單位去檢查系統未進行的cron任務
4、開機時自動執行,然後將未執行的計劃任務執行一遍後,anacron 就會自動停止
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-06/144700.htm
相關文章