at一次性定时任务
# at服务是否安装
chkconfig --list | grep atd
systemctl list-unit-files | grep atd # centos 7
# 查看状态
service atd status
systemctl status atd.service # centos 7
# 开启
chkconfig atd on
systemctl enable atd.service # centos 7
at的访问控制
如果含有/etc/at.allow,则文件中的用户可以使用at命令(/etc/at.deny会被忽略)
如果不含/etc/at.allow,含有/etc/at.deny文件,则/etc/at.deny文件中的用户不能使用at命令,对root不起作用。
如果两个文件都不存在,那么只有root用户可以使用at命令。
at命令
at [选项] 时间
选项:
-m :当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
-c 工作号:显示at工作的实际内容
时间:
— HH:MM # 例如 02:30
— HH:MM YYYY-MM-DD # 例如02:30 2016-11-11
— HH:MM[am|pm] [month] [date] # 例如 02:30 dec 25
— HH:MM[am|pm] + [minutes|hours|days|weeks] # 例如 now + 5 minutes
# 查询当前服务器上的at工作
atq
# 删除指定的at任务
atrm [工作号]
例1:
at now + 2minutes
at > /root/hello.sh >> /root/hello.log
ctrl+d 保存退出at命令
例2:
# 在指定的时间重启
at 01:00 2016-11-11
at > /bin/sync
at > /sbin/shutdown -r now
crontab循环定时任务
cron服务管理与访问控制
# crond服务是否安装
chkconfig --list | grep crond
systemctl list-unit-files | grep crond # centos 7
# 查看状态
service crond status
systemctl status crond.service # centos 7 查看状态
# 开启
chkconfig crond on
systemctl enable crond.service # centos 7
cron的访问控制
如果含有/etc/cron.allow,则文件中的用户可以使用at命令(/etc/cron.deny会被忽略)
如果不含/etc/cron.allow,含有/etc/cron.deny文件,则/etc/cron.deny文件中的用户不能使用cron命令,对root不起作用。
如果两个文件都不存在,那么只有root用户可以使用cron命令。
crontab命令
crontab [选项]
选项:
-e:编辑crontab
-l:查询crontab任务
-r:删除当前用户所有的crontab任务
# 进入crontab编辑界面,会打开vim编辑你的工作
crontab -e
格式 :* * * * * 执行的任务
# 在执行crontab -e时不需要指定user-name,在编辑/etc/crontab时需要指定用户名
# 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
项目 | 含义 | 范围 |
---|---|---|
第一个"*" | 一小时中的第几分钟 | 0-59 |
第二个"*" | 一天中的第几小时 | 0-23 |
第三个"*" | 一月中的第几天 | 1-31 |
第四个"*" | 一年中的第几月 | 1-12 |
第五个"*" | 一周中的星期几 | 0-7(0.7都代表星期日) |
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个"*"代表一小时中每分钟都执行一次。 |
, | 代表不连续的时间。比如"0 8,12,16 * * *命令"代表在每天的8:00,12:00,16:00都执行一次。 |
- | 代表连续的时间范围。比如" 0 5 * * 1-6 命令",代表在周一到周六的凌晨5:00执行命令 |
*/n | 代表每个多久执行一次。比如" */10 * * * * 命令",代表每个10min执行一次 |
注意事项
- 六个选项不能为空,必须填写。(时间占五个选项,命令一个)。如果不确定使用“*”代替时间。
- crontab定时任务,最小是有效时间是分钟,最大有效时间范围是月。
- 在定义时间时,日期和星期最好不要再一条定时任务中出现。(如果出现的话是几号或者星期几都会执行)
- 在定时任务中,不管是直接写命令,还是在脚本中写命令买最好都用绝对路径。
系统的crontab设置
系统的定时任务,crontab -e
是每个用户执行的命令。也就是说不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这时们就需要编辑 /etc/crontab 这个配置文件了。
执行系统的定时任务的方法
1.手工执行定时任务
2.系统定时任务
①把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的一个
②修改/etc/crontab配置文件
anacron配置
anacron是用来保证在系统关机的时候错过的定时任务,可以再系统开机之后再执行。
vi /etc/anacrontab
内容如下:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
anacron检测周期
- anacron会使用一天,七天,一个月作为检测周期
- 在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间
- 和当前时间作比较,若在两个时间的差值炒过了anacron的指定时间差值,证明有cron任务被执行