定时任务简介

定时任务:未来的某时间点执行一次某任务或周期性运行某个人物,执行结果会通过邮件发给用户
分类:

1. 定点执行一次某任务:at,batch
2. 周期性运行某任务:	 crontab

crond是linux用来周期性执行某种任务或等待处理某些事件的一个进程

可以使用如下命令查看
	service crond status	:Centos6
	systemctl status crond  :Centos7

系统任务调度:系统周期性所要执行的工作,比如写缓存,日志等
用户任务调度:用户定期需要执行的工作,如备份数据,定时邮件等
用户可以使用crontab工具来指定计划任务,此类文件都在/var/spool/cron目录中

定时任务语法

1. at:允许一套特定复杂的指定时间的方法

at 选项 参数
	选项:
		  -V :打印版本编号
		  -q :使用指定的伫列(queue)来存储,at的资料存储在queue中。
		  -m :即使程序完成后没有结果,也要寄邮件给使用者
		  -f file :读入预先写好的命令档
		  -l :列出所有的指定
		  -d :删除指定
		  -v :列出所有已经完成但尚未删除的指定
  • 相关命令:
at:在特定时间执行一次性的任务
  atq :列出用户的计划任务(root则列出所有用户的计划任务)
  atrm :根据job number删除at任务
  batch :在系统符合(空闲)允许的情况下执行at任务
  • 示例:
[root@localhost ~]# yum install at
[root@localhost init.d]# at now +1 minutes
at> echo 'hello world'
at> <EOT>
job 3 at Fri May 15 16:18:00 2020
3       Fri May 15 16:18:00 2020 a root
[root@localhost init.d]# atq
3       Fri May 15 16:18:00 2020 a root
4       Fri May 15 16:20:00 2020 a root
#删除
[root@localhost init.d]# atrm 3
[root@localhost init.d]# atrm 4
[root@localhost init.d]# atq
[root@localhost init.d]#

2. crond
cron服务是系统服务来控制的,默认是启动的。
crontab是用户可以设定计划任务的命令

service crond start		启动服务
service crond stop		关闭服务
service crond restart	重启服务
service crond reload	重新载入配置
service crond status	启动服务
[root@localhost init.d]# cat /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/cron.deny  :此文件中所列出的用户不允许使用crontab命令
#	/etc/cron.allow :此文件中的用户可以使用crontab命令
#	/var/spool/cron :所有用户定时任务存放的目录,以用户命名
  • crontab
crontab 命令:
		-e :编辑任务
		-l :列出任务
		-r :移除所有任务 ,即删除/var/spool/cron/username
		-i :在使用-r时  交互
		-u user:root 用户可以指定用户管理cron任务

示例:crontab -e

1. 每分钟执行一次echo 'hello' >> file
[root@localhost cron]# pwd
/var/spool/cron
[root@localhost cron]# cat root
* * * * * echo 'hello' >> /root/file
[root@localhost ~]# cat file
hello
hello
#删除
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
2. 每小时的第3,15分钟执行
	3,15 * * * *  command
3. 每天上午8-11点的第3,15分钟执行
	3,15 8-11 * * *  command
4. 每隔两天的上午8-11点,3,15分钟执行
	3,15 8-11 */2 * *  command
5. 每个星期一的上午8-11点,第3,15分钟执行
	3,15 8-11 * * 1 command
6. 每晚21.30重启network
	30 21 * * * service restart network
7. 每月1,10,22日的4.45重启network
	45 4 1,10,22 * * service restart network
8. 每周六,周日的1:10重启network
	10 1 * * 6,0 service restart network

crontab标准化工作

1. 计划任务脚本存放指定位置,便于维护管理及定期备份
2. 写入定时任务时,必须在前面写注释
	添加着,添加时间,任务有效期,计划任务脚本对象,脚本的作用,及其他
3. 执行脚本前加上/bin/bash或/bin/sh,脚本必须使用绝对路径
4. 定时任务,需要尽量避免标准输出和标注错误输出   可以>/dev/null
5. 能用命令完成的也要卸载脚本里
6. 在指定用户下执行相关规定
7. 书写规范

------------------------------------------------------------------------------------------------------- 返回目录