本文和大家分享的主要是linux計劃任務 Crontab相關內容,一起來看看吧,希望對大家學習linux有所幫助。
Q:Linux下,如果想要在指定的某個時間點干點什么事,該如何制定計劃?
A:
計劃任務, 創(chuàng)建和管理在指定時間自動執(zhí)行的任務。
注意:
要是任務計劃在指定時間自動運行,計劃任務的服務必須是啟動的。
1、使用 at命令 調用 atd進程 設置在某個特定的時間,執(zhí)行一次性任務。
2、使用 crontab命令 調用 crond進程 ,設置按固定的周期(如每天、每周等)重復執(zhí)行預先計劃好的任務。
一、一次性計劃任務
在指定的日期、時間點自動執(zhí)行預先設置的一些命令操作。
系統(tǒng)服務的名稱:/etc/init.d/atd
[root@localhost ~]# service atd start
[root@localhost ~]# service atd status
atd (pid 5790) is running...
//確保atd系統(tǒng)服務啟動
[root@linuxidc mydata]# at 08:45
at> reboot
//按Ctrl+D鍵提交任務
at>
job 3 at 2017-06-09 08:45
[root@linuxidc mydata]# atq3 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 + 數(shù)字 [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開頭的文件,任務執(zhí)行完畢,文件消失。
2、/etc/at.deny:只有該名單里面的人不可以使用
3、/etc/at.allow:只有該名單里面的人可以使用
二、周期計劃任務
按照預先設置的時間周期(分鐘、小時、天……)重復執(zhí)行用戶指定的命令操作。
1、crontab命令調用crond進程執(zhí)行。
2、系統(tǒng)服務的名稱:/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/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/
# 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去自動執(zhí)行的時候,盡量寫命令的絕對目錄。
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 -l50 3 2 3 * echo "123"
[root@localhost linuxidc]# crontab -r
[root@localhost linuxidc]# crontab -lno crontab for root
3、編輯語法
通過 crontab -e 進入編輯模式后 ,語法格式如下:
時間數(shù)值的特殊表示方法:
1、* 表示該范圍內的任意時間
2、, 表示間隔的多個不連續(xù)時間點
3、- 表示一個連續(xù)的時間范圍
4、/n 指定間隔的時間頻率
0 17 * * 1- 5
//周一到周五每天17:0030 8 * * 1,3,5
//每周一、三、五的8點30分0 8-18 * * *
//8點到18點整0 12 */3 * *
//每隔3天的12點整
注意:
1、資源分配不均:多個計劃任務同時運行。
2、安全檢查:防止有非法計劃任務。
3、周和日、月不可同時并存:容易導致計劃任務時間混亂。
4、缺陷彌補
缺陷:cron在系統(tǒng)關機后不能執(zhí)行計劃任務……
為周期性計劃任務cron收拾殘局的anacron程序解決該缺陷。
1、anacron程序是系統(tǒng)自帶的定時任務,不能替代cron
服務名稱:/etc/init.d/anacrond
服務日志:/var/spool/anacron
服務配置文件:/etc/anacrontab
2、會每個小時被執(zhí)行一次,腳本在/etc/cron.hourly
3、按天、周或月為單位去檢查系統(tǒng)未進行的cron任務
4、開機時自動運行,然后將未執(zhí)行的計劃任務執(zhí)行一遍后,anacron 就會自動停止
來源:linux公社