计划任务
在工作中,很多脚本是要到凌晨才运行,或者需要反复不断运行,这时就需要程序定时调起执行,这种我们就叫计划任务。
- 一次性计划任务
at
- 周期性计划任务
- 计划任务加锁
flock
一次性计划任务
计划任务:让计算机在指定的时间运行程序
date
at 18.31 // 18.31分执行
# 计划任务是没有终端的,不能进行标准输出,输出要加重定向指定对应的文件
# 执行的命令很有可能没有命令搜索路径,执行计划任务的时候,如果不是内部命令的话,建议加上命令的完整路径;如果是shell脚本的话,记得用source引入环境变量
echo hello > /tmp/hello.txt // ctrl+d 提交计划任务
atq // 查询一次性计划任务还没有被执行的
周期性计划任务
- cron
crontab -e
编辑周期性计划任务crontab -l
查看周期性计划任务- 配置格式
- 分钟 小时 日期 月份 星期 执行的命令
- 注意命令的路径问题
#!/bin/bash
crontab -e
# which date /usr/bin/date
* * * * * /usr/bin/date >> /tmp/date.txt // 每分钟运行一次,因为最小单位是分钟
vim /var/log/cron // 计划任务日志
* * * * 1,5 /usr/bin/date >> /tmp/date.txt // 周一和周五,每分钟执行一次
* * * * 1-5 /usr/bin/date >> /tmp/date.txt // 周一到周五,每分钟执行一次
* * 7 7 1-5 /usr/bin/date >> /tmp/date.txt // 7月7日,如果这一天是周一至周五,每min执行一次
15 18 7 7 1-5 /usr/bin/date >> /tmp/date.txt // 7月7日18:15,如果这一天是周一至周五,每min执行一次
30 3 * * 1 /usr/bin/date >> /tmp/date.txt // 周一的3:30
30 3 15 * * /usr/bin/date >> /tmp/date.txt // 每月15日的3:30
0 3 15 * * // 每月15号的3点整(要写成0,写成*会运行60次)
使用crontab -e的时候,每个用户会有自己的计划任务,保存在/var/spool/cron/目录下(ls /var/spool/cron/)
计划任务加锁
如果计算机不能按照预期时间执行。
- anacontab 延时计划任务 (如果计划任务是3:00,2:30关机了,3:30又开机了。延时计划任务可以在开机后延后运行。)
- flock 锁文件 (一个备份脚本正在备份,还没完成的时候又一个备份脚本执行了,可能破坏备份的完整性)
vim a.sh
sleep 10000
flock -xn "/tmp/f.lock" -c "/root/a.sh" // -x 排它锁,可以应用到备份脚本,防止多实例运行