一天一命令-crontab
一天一命令-crontab
系統軟硬件環境平臺:
VMware Workstation Pro 12.5.5 build-5234757
CentOS Linux release 7.3.1611
內核版本:3.10.0-514.el7.x86_64
contab
提交和管理用戶需要周期性執行的任務
Usage: crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s] crontab -n [ hostname ] crontab -c Options: -u <user> define user -e edit user‘s crontab -l list user‘s crontab -r delete user‘s crontab -i prompt before deleting -n <host> set host in cluster to run users‘ crontabs -c get host in cluster to run users‘ crontabs -s selinux context -x <mask> enable debugging
查詢crond服務的運行情況:
#systemctl list-units --type service | grep cron crond.service loaded active running Command Scheduler #systemctl list-unit-files | grep cron crond.service enabled
linux下的任務調度管理分兩類:系統任務調度和用戶任務調度。
系統任務調度:系統周期性需要執行的任務,cron文件位置為/etc/crontab或者/etc/cron.d/目錄下的自定義文件
#more /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
/etc/crontab文件的前4行定義的crond任務運行的環境變量,
第1行SHELL指定使用的shell類型;
第2行PATH指定系統執行命令的路徑;
第3行MAILTO變量指定crond的任務執行信息需要發送的用戶,空表示不發送給任何人;
第4行HOME變量指定執行命令或腳本時使用的主目錄。
#ll /etc/cron.d
total 24
drwxr-xr-x. 2 root root 54 Feb 20 08:31 ./
drwxr-xr-x. 139 root root 8192 May 30 18:35 ../
-rw-r--r--. 1 root root 128 Mar 31 2016 0hourly
-rw-r--r--. 1 root root 108 Nov 5 2016 raid-check
-rw-------. 1 root root 235 Nov 6 2016 sysstat
執行命令#more /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
時間格式:
# * * * * * user-name command to be executed
# 分 時 日 月 周 用戶 命令或腳本
minute:0-59,取值範圍0-59之間的整數
hour:0-23
day:1-31
month:1-12或者jan,feb,mar,apr ...
week:0-6或者sun,mon,tue,wed,thu,fri,sat。周日可以用0或7
user:指定用戶
command:要執行的命令,可以是系統命令或腳本文件
在以上各個字段中,還可以使用以下特殊字符:
星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作
逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中杠(-):可以用整數之間的中杠表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次
也可以通過以下方式來添加時間@...
@reboot : Run once after reboot.
@yearly : Run once a year, ie. "0 0 1 1 *".
@annually : Run once a year, ie. "0 0 1 1 *".
@monthly : Run once a month, ie. "0 0 1 * *".
@weekly : Run once a week, ie. "0 0 * * 0".
@daily : Run once a day, ie. "0 0 * * *".
@hourly : Run once an hour, ie. "0 * * * *".
@hourly root touch ~/`date +%F.log` //每小時執行命令
用戶任務調度:用戶定期執行的任務,用戶自定義的計劃任務,所有用戶定義的crontab文件位置在/var/spool/cron目錄中,文件名和用戶名一致,同時可以設置使用者的權限,文件如下:
/etc/cron.allow 列出允許使用crontab目錄的用戶
/etc/cron.deny 列出不允許使用crontab目錄的用戶
/var/spool/cron/ 所有用戶存放crontab文件的目錄,默認以用戶名命令
執行命令#ll /etc/cron[2tab]
cron.d/ cron.daily/ cron.deny cron.hourly/ cron.monthly/ crontab cron.weekly/
案列:
* * * * * cmd //每1分鐘執行一次cmd
15,30 * * * * cmd //每小時的第15分和第30分鐘執行cmd
15,30 8-11 * * * cmd //每天的8-11點的第15分和第30分鐘執行cmd
15,30 8-11 */2 * * cmd //每間隔2天的8-11點的第15分和第30分鐘執行cmd
15,30 8-11 * * 1 cmd //每周一的8-11點的第15分和第30分鐘執行cmd
30 22 * * * cmd //每天的22:30執行cmd
30 22 1,10,20 * * cmd //每月1,10,20號的22:30執行cmd
30 22 * * 6,0 cmd //每周六和周日的22:30執行cmd
0,30 20-24 * * * cmd //每天20-24點間隔30分鐘執行cmd
*/30 20-24 * * * cmd //同上
* */2 * * * /etc/init.d/smb restart //每隔2小時重啟smb
0 11 4 * mon-wed cmd //每月4號和每周一到周三的11點執行cmd
0 4 1 jan * cmd //1月1號4點執行cmd
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly命令裏的腳本
15 3 * * 1-5 find $HOME -name big 2>/dev/null | xargs rm -f //Clean up big files every weekday morning at 3:15 am
0 12 14 2 * mailx john%Happy Birthday!%Time for lunch. //Mail a birthday greeting
#crontab -l # Run the hourly jobs SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/root * * * * * touch aabbcc * * * * * ls -al /root >> /root/ls.log #date Wed May 31 11:26:18 CST 2017 #ll aabbcc -rw-r--r--. 1 root root 0 May 31 11:26 aabbcc #ll ls.log -rw-r--r--. 1 root root 7341 May 31 11:26 ls.log #date Wed May 31 11:27:29 CST 2017 #ll aabbcc -rw-r--r--. 1 root root 0 May 31 11:27 aabbcc #ll ls.log -rw-r--r--. 1 root root 9788 May 31 11:27 ls.log #crontab -r #crontab -l no crontab for root #ls /var/spool/cron/
本文出自 “rackie” 博客,請務必保留此出處http://rackie386.blog.51cto.com/11279229/1934303
一天一命令-crontab