主要命令
at
未来的某时间点 执行一次某任务
cron
周期性的运行某任务
at 命令
~ ~ ~ 相关文件
用户创建的 at 队列的存放位置
/var/spool/at
at 程序服务脚本文件
1、CentOS 7
/usr/lib/systemd/system/atd.service
2、CentOS 6
/etc/rc.d/init.d/at
注 : chkconfig 可以对/etc/init.d/ 目录下的系统启动时的服务进行管理控制
“白名单” 和“黑名单” 文件
1、/etc/at.deny
将相关用户放置在此文件中,则用户将不能使用 at 创建计划任务
此文件是安装 at 程序即生成
2、/etc/at.allow
将相关用户放置在此文件中,则用户可以创建 at 的计划任务
此文件是需要用户手动在 /etc/ 目录下创建
注:
1、两个文件对之前设置的 at 计划任务无效;
2、当创建了白名单之后,只有白名单里面的用户可以创建计划任务,且比黑名单的优先级要高;
3、当两个文件都不存在时,则只有root 用户可以执行 at 创建计划任务
~ ~ ~ 相关命令
管理 atd 服务
大家对 systemd 和 service 命令的使用肯定比较熟悉了,不多于赘述
systemctl status | restart | start | stop atd
service atd status | restart | start | stop
语法格式
at [options]… TIME
1、[options]
- -v :显示版本信息
- -l :列出 atd 队列中等待运行的作业及其编号,相当于atq
- -d :删除指定的作业,相当于atrm
- -c # :删除指定的作业,其中# 表示任务作业编号,用 at -l 即可查看
- -f FILE :从指定的文件中读取有关 atd 的服务
- -m :当任务完成之后,将给用户发送提示邮件,即使at 任务没有标准输出
注 : 作业执行命令的结果中的标准输出和错误以邮件发送给相关用户
2、TIME
- HH:MM [yyyy-mm-dd] :时-分-年-月-日
- noon,midnight,teatime(4pm)
- tomorrow
- now+#{minutes ,hours , days ,OR weeks}
示例
1、通过管道传输任务
[ root@scritp7 spool ]# echo "touch file" |at -m now+1minutes
job 4 at Sun Sep 3 14:06:00 2017
[ root@scritp7 spool ]# at -l
4 Sun Sep 3 14:06:00 2017 a root
2、从指定文件中读取及计划任务
at -f FILE TIME
3、交互式设置计划任务
[ root@scritp7 spool ]# at 14:12 2017-9-4
at> echo "lilili"
at> pwd
at> <EOT>
job 5 at Mon Sep 4 14:12:00 2017
注 :交互式执行,以Ctrl +d 结束
crond 命令
作用 :用来周期性的执行某任务,常在后台执行,从标准输入读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
~ ~ ~ 相关文件
程序包文件 : cronie
crond 命令来自此包
/usr/sbin/crontab
需要被执行的计划任务被读取到此文件中,然后,系统到了时间进行执行
crond 服务程序所在文件
即系统启动时,系统根据此目录下的文件来决定是否开启 crond 服务
1、CentOS 6
/etc/rc.d/init.d/crond
2、CnetOS 7
/usr/lib/systemd/system/crond.service
crond 计划任务是否执行,查看的日志文件
/var/log/cron
此文件将会显示已经执行过了的计划任务的
管理crond 的状态
service crond status
systemctl status crond
系统的计划任务的文件位置
主要是系统一些默认的计划任务
2、/etc/cron.d/ 配置文件
3、/etc/cron.hourly/ 每小时执行的任务脚本
4、/etc/cron.daily/ 每天都要执行的任务脚本
5、/etc/cron.weekly/ 每周都要执行的任务脚本
6、/etc/cron.monthly/ 每月都要执行的任务脚本
7、/etc/anacrontab 定义那些可能因为关机等情况而没有执行的计划任务怎么处理
8、/etc/cron.daily/logrotate
注 : 我们可以将一些规定要执行的任务放在这些目录之下,例如每天上课时间时,固定的时间点下载老师主机上面的脚本,当然,也可以直接在 /etc/crontab 文件中进行编辑
“白名单”和“黑名单” 文件
etc/cron.deny
tc/cron.allow
原理和atd 服务的原理一样,这里不再赘述
~ ~ ~ crond 计划任务设置
通过配置文件设置 : /etc/crontab
1、/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 执行用户 执行的计划任务
————————————————————————————————–
2、/etc/crontab 时间设置
相关说明**
1、特定值 : 给定具体时间
2、* : 表示每
3、离散取值 :#,#,#
4、连续取值 : # - #
5、在指定事件范围内定义步长 : /#: #即为步长。例如: */10 每10分钟小时
6、特殊表示法
@ @reboot Run once after reboot. #重启时
@yearly 0 0 1 1 * 每年
@annually 0 0 1 1 * 每年
@monthly 0 0 1 * * 每月
@weekly 0 0 * * 0 每星期
@daily 0 0 * * * 每天
@hourly 0 * * * * 每小时
7、每周的星期几 和 每月的第几天取 并集,其他的取交集
示例
1、每3小时执行一次任务
* 3/* * * * root wall “Good good study” ; echo “Fighting”
2、星期和天的关系
* * 5 , 6 * 1 - 3 root echo ” Cute ”
说明:星期和天去并集,即每月的5 ,6 号,以及每周的 星期 1 到 3 执行此任务
3、每天早上的 9点 10 分执行
10 9 * * * root reboot
4、如何在秒级别运行任务,每20秒运行一次
* * * * * root for min in 0 1 2 ; do echo “hi” ; sleep 20 ; done
注 : 在 /etc/crontab 文件中执行命令时,最好写上命令的路径
~ ~ ~ 用户cron
用户的计划任务的文件位置
/var/spool/cron/USERNAME
用户设置计划任务的方法
1、直接在 /var/spool/cron 文件里面进行编辑
格式同在 /etc/crontab 文件里面编辑计划任务一样
2、使用命令:crontab
root 也可使用此命令创建计划任务
1)格式
crontab [ - u user ] [ - l | - r | - e ] [ - i ]
- -l : 列出所有任务
- -e : 编辑计划任务
- -r : 移除所有任务
- -i : 与 -r 一起使用,以交互模式移除指定任务
- -u :仅root 可用,指定用户管理cron任务
2)是crontab -e 编辑文件时,颜色显示
- 仅对当前用户有效
export EDITOR = vim
- root 用户设置,对所有用户有效,将以上命令写入到文件中去,例如
vim / etc/profile.d / env.sh
export EDITOR = vim
3)示例
- root 用户修改其他用户创建的计划任务
crontab -e -u USERname
~ ~ ~ anacron系统
作用
运行计算机关机时cron不运行的任务,CentOS6 以后版本取消 anacron 服务,由 crond服务管理
配置文件
/etc/anacrontab
负责执行/etc/cron.daily /etc/cron.weekly 等文件中因为关机而没有执行的计划任务
内容详解:
—————————————————————————————————–
RANDOM_DELAY=45 随机挑选没有执行的任务
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
说明:
1 5 cron.daily nice run-parts /etc/cron.daily
每天开机5分钟后执行/etc/cron.daily下的脚本
—————————————————————————————————–