定时任务简介
定时任务:未来的某时间点执行一次某任务或周期性运行某个人物,执行结果会通过邮件发给用户
分类:
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. 书写规范
------------------------------------------------------------------------------------------------------- 返回目录