相关概念
作用:定时自动完成特定的工作
分类:
- 一次性计划任务 (at、batch)
- 周期性重复的计划任务 (crontab、anacron)
at一次性计划任务
格式
at [-V] [-q queue] [-f file] [-mMlbv] TIME
at [-V] [-q queue] [-f file] [-mMlbv] -t time_arg
at -c job [job...]
at [ -rd ] job [job...]
atq [-V] [-q queue]
atrm [-V] job [job...]
batch
选项
-q 队列编号:指定计划任务的队列编号,默认是a
-l:显示尚未执行的计划任务(等于执行命令 atq)
-d NUM:删除指定编号的计划任务(等同于命令 atrm)
-c NUM:显示指定编号的计划任务要执行具体的命令
-f FILE:从文件中读取要执行的操作
-f选项
从文件job.txt中读取要执行的操作
第一步:创建job.txt
# vim job.txt
useradd zs
touch /tmp/a.txt
第二步:读取job.txt创建计划任务(17:00)
# at -f job.txt 17:00
第三步:检查
# at -l
# at -c NUM
服务
#service atd start|stop|restart|status
# chkconfig atd on|off
at依赖的服务atd ,系统服务
作用:让at以进程的方式工作在系统后台
必须保证atd服务处于工作状态,那么计划任务才能够正常的执行
时间表示方法
1. HH:MM 例子:12:33 ,这里表示的是下一个12:33分
2. HH:MM YYYY-mm-dd 例子:at 08:20 2020-07-01 指定年月日小时分钟【不能是过去的时间】
3. 特殊方式
now
now +5 minutes 5分钟之后执行这个计划任务
now +4 days
now +6 weeks
am
4am + 3 weeks
pm
计划任务保存位置
/var/spool/at
这里保存的是那些尚未执行的计划任务,一旦计划任务被执行,则这里的响应的文件被删除
注意
at计划任务的执行结果都是以邮件的方式告知用户的
即使在计划任务中有echo,echo的结果也不是显示在终端,而是以邮件的内容方式发送给用户
邮件的位置: /var/spool/mail/USERNAME
【如果一定要在终端上显示信息,需要指定输出重定向到终端设备文件编号】
crontab
作用: 实现周期性的计划任务
服务: crond
#service crond start
#chkconfig crond on
cron的分类
系统cron
系统安装完成之后,自动完成系统特定的操作,比如生成locate的数据库、wathis的数据库
位置: /etc/crontab
用户cron
用户自定义的计划任务
位置:/var/spool/cron/USERNAME
采坑记录:suse操作系统的计划任务
自启动文件: /etc/rc.d/after.local
用户自定义计划任务目录: /var/spool/cron/tabs/
VM160:/var/spool/cron/tabs # ll
total 8
-rw------- 1 daemon daemon 224 Nov 3 18:53 daemon
-rw------- 1 root root 144 Sep 29 12:04 root
时间表示格式
# 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表示周日)
- *:表示任何时间,例如每天7:30 就是 30 07 * * *
- -:表示一个连续范围,例如每天的7:30 8:30 9:30 就是 30 07-09 * * *
- ,:表示离散的时间点,例如每天的7:30 11:30 15:30 就是 30 07, 11, 15 * * *
- /n:表示每隔n单位的时间,例如每隔10分钟 就是 */10 * * * *
选项
-l:显示指定用户的计划任务列表(默认显示当前用户)
-u USERNBAME:为指定用户指定计划任务,显示指定用户的计划任务(结合-l)
-e:制定、修改计划任务(本质上就是调用vi去编辑/var/spool/cron/USERNAME文件
-r:删除当前用户的全部的计划任务(小心)
例子
1. 每隔3分钟,输出一次系统时间
*/3 * * * * echo `date`
2. 每隔3分钟,输出一次系统时间到终端
*/3 * * * * echo `date` >> /dev/pts/3
3. 每天的3点整创建一个文件,文件名是 当前日期-x小时:分钟:秒.log
00 03 * * * /bin/touch /tmp/`/bin/date +\%F-\%H:\%M:\%S`.log
4. 每隔5天将/tmp下的文件清空一次
* * */5 * * /usr/sbin/rm -r /tmp/*
5.每个小时的整点都执行后面的命令
00 */1 * * * service network restart
6.23点和0点到7点,每分钟都重启一次网络
* 23,00-07/1 * * * service network restart
总结
*本来就表示每一X
*/1 和 * 是没有区别的
1、定时任务要加注解,
2、结尾用>/dev/null 2>&1屏蔽输出
3、计划任务的命令路径要用绝对路径
4、crond服务必须开启
5、可查看定时任务的日志/var/log/cron
6、定时任务的一些文件和目录
1、/etc/crontab
2、/var/log/cron
3、/var/spool/cron/UserName
4、/etc/cron.deny
5、/etc/cron.allow
6、/etc/cron.d/0hourly
7、/etc/cron.daily/
8、/etc/cron.hourly/
9、/etc/cron.monthly/
10、/etc/cron.weekly/