1. 程式人生 > >一天一命令-crontab

一天一命令-crontab

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