一天一命令-crontab

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一天一命令-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的主要内容,如果未能解决你的问题,请参考以下文章

一天一命令-ls

一天一命令-history

一天一命令-xargs

一天一命令-screen

Crontab - 在目录中运行

一天一命令-sed