定时任务
Linux下定时执行任务(备份执行脚本/命令)
备份 流量低谷期(人少时)
分类
crontab 工作必会 软件包:cronie
anacron 适用于服务器非7*24小时运行
atd 一次性的定时任务
crontab分类
系统的定时任务
配置文件 /etc/crontab
目录 /etc/cron.daily 天 目录下的内容系统定时任务会每天执行
/etc/cron.hourly 小时
/etc/cron.monthly 月
/etc/cron.weekly 周
作用:定时检查,防止中毒
存放开机自启动
/var/log/cron 系统定时任务的日志
定时切割
系统定时对系统日志进行切割(日志切割/日志轮询)防止单个日志过大
完成者:系统定时任务+logroate
对应目录,文件/etc/cron.dailly/
/etc/logrotate.d/syslog
用户的定时任务 /var/spool/cron/root存放定时任务的文件
crontab -l 查看当前用户的定时任务 list
-e 修改当前用户的定时任务 edit
-h 查找crontab的帮助
-u 指定用户
-r 清空定时任务
定时任务格式
规则 /etc/crontab
分时日月周 命令/脚本
*
特殊符号
* 每
/ 每隔 */2 * * * * 每隔两分钟
- 范围 * 9-12 * * * 9点到12点的每分钟
, 一个个独立时间 * 9,10,11,12 * * * 九点,十点,十一点,十二点的每分钟
* 21-23,00-03* * * 晚上九点到第二天凌晨三点
定时任务日志的格式 日志只能显示无法查看对错
日志 /var/log/cron
Apr 28 18:43:01 lc01 CROND[27666]: (root) CMD (sh/server/scripts/ip-date.sh >>/tmp/time.log 2>&1 )
Apr 28 18:44:01 lc01 CROND[27673]: (root) CMD (sh/server/scripts/ip-date.sh >>/tmp/time.log 2>&1 )
Apr 28 18:45:01 lc01 CROND[27681]: (root) CMD (sh/server/scripts/ip-date.sh >>/tmp/time.log 2>&1 )
Apr 28 18:46:01 lc01 CROND[27688]: (root) CMD (sh/server/scripts/ip-date.sh >>/tmp/time.log 2>&1 )
Apr 28 18:47:01 lc01 CROND[27720]: (root) CMD (sh/server/scripts/ip-date.sh >>/tmp/time.log 2>&1 )
时间 root用户的定时任务 CMD 执行的命令或脚本
检查定时任务是否创建成功
看文件的内容
看日志
定时任务步骤:
1命令行测试
2书写脚本并测试
3写入定时任务每分钟执行检查
4写入定时任务根据要求修改时间
/server/scripts/ 创建存放脚本目录
sh 执行脚本 bash
-x 执行脚本过程(显示加号由多到少表示先后顺序)
脚本首行 #!/bin/bash
书写定时任务 坑
1加注释
2书写定时任务时尽量使用脚本
3使用sh执行脚本
4定时任务中%有特殊含义(相当于回车)需使用撬棍转译 (脚本中没有特殊含义)
5定时任务中的命令和脚本使用绝对路径
相对路径指 用户定时任务 在用户家目录下
系统定时任务 在根下
6 原因
若没追加或重定向输出的信息会到显示到/var/spool/mail/root
故障
定时任务没有定向到空或追加到文件的故障
1 提示 you have new mail
in /var/spool/mail/root
2 关闭定时任务邮件服务
systemctl stop postfix 临时
systemctl disablepostfix 永久
系统会把没有发送出去的邮件临时放起来
/var/spool/postfix/maildrop
造成目录下会有大量的小文件占用大量inode 导致inode满了
>/dev/null 2>/dev/null 正确的信息错误信息定向到黑洞
>/dev/null 2>&1
&>/dev/null
将输出信息追加到文件
3定时任务运行脚本时环境变量的问题
定时任务运行脚本时只时别/usr/bin和/bin下的命令
解决: 写脚本时命令写绝对路径
写脚本开头重新设置PATH
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
./etc/profile
source /etc/profile
检查定时任务的服务是否运行
ps -ef |grep crond
systemctl is-active crond
定时任务是否开机自启动
systemctl status crond
systemctl is-enabled crond
系统日志服务
定时任务由系统rsyslog运行(需检查是否开启)