定时任务
定时任务实现方法
1) 定时任务软件 cronie
2) 定时任务软件atd 只能一天执行一次
3) anacron 定时时间有固定的设置,即每小时,每天,每星期,每月
系统默认定时任务
cron.hourly 系统每小时执行的任务
cron.daily 系统每天执行的任务
cron.weekly 系统每周执行的任务
cron.monthly 系统每月执行的任务
用户自定义设置定时任务
crontab 系统设置和查看定时任务
crontab –e 编辑用户定时任务
crontab –l 列表用户定时任务
定时任务配置文件
/var/spool/cron/root root用户设置定时任务的文件
/var/spool/cron/oldboy oldboy用户设置定时任务的文件
定时任务启动
systemctl start crond
systemctl enabled crond
定时任务样例文件
[root@oldboy63 /var/log]# cat /etc/crontab
SHELL=/bin/bash 指定SHELL变量
PATH=/sbin:/bin:/usr/sbin:/usr/bin 指定PATH路径变量
MAILTO=root 指定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
分 时 日 月 周
定时任务的日志文件分析
[root@oldboy63 /var/log]# head -2 cron
Jul 28 09:24:01 oldboy63 run-parts(/etc/cron.daily)[115823]: finished logrotate
Jul 28 09:24:01 oldboy63 run-parts(/etc/cron.daily)[115811]: starting man-db.cron
01 02 03 04
01:定时任务触发时间
02:主机名
03:读取什么定时任务文件信息
04:定时任务做了什么事
定时任务书写格式
分 时 日 月 周
分钟 0-59
小时 0-23
日期 1-31
月份 1-12
周 0-6
'* 每分钟,或每小时,或每..执行一次
\n 每隔多长时间执行一次
- 连续的一个时间范围
, 不连续的时间段执行
定时任务编写常见问题
1) 每隔5分钟进行时间同步
方法一:使用绝对路径编写
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
方法二:把命令放入脚本中
#!/bin/bash
PATH= /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
ntpdate ntp1.aliyun.com
2) 查看定时任务的环境变量
* * * * * echo $PATH >/root/path
[root@oldboy63 /etc/cron.daily]# cat /root/path
/usr/bin:/bin
3) 查看没有配置PATH路径的脚本环境变量
* * * * * /bin/sh /root/d.sh &> /dev/null
[root@oldboy63 ~]# cat d.sh
#!/bin/bash
echo $PATH > /root/path1
[root@oldboy63 ~]# cat path1
/usr/bin:/bin
3. 规范化编写定时任务
*/5 * * * * /usr/bin/ntpdate ntp1.aliyun.com &> /dev/null
postfix服务开启:如果没有重定向黑洞文件,/var/spool/mail/root.如使用root用户,则这个文件就会变大,当命令执行错误时,导致block块变大
postfix服务没有开启:如果没有重定向黑洞文件, /var/spool/postfix/maildrop/,如果使用root用户,当命令执行错误时,这个文件就会堆满小文件,导致inode数量过大
编写时:把无论正确或者错误的信息重定向输出到/dev/null
4. 将特殊字符使用转义字符\ 如\%
或者使用脚本方式编写
定时任务编写注意事项
- 编写定时任务需要有注释信息
- 编写定时任务需要注意环境变量
- 编写环境变量需要注意特殊符号
- 编写定时任务需要将输出信息定义到空/dev/null
- 编写定时任务建议使用脚本编写
编写定时任务规范
第一个里程:测试命令是否在命令行中执行成功
第二个里程:把命令放入定时任务中(绝对路径)
第三个里程:调整时间,进行测试
第四个里程:检查信息,检查任务执行结果
编写定时任务脚本规范
第一个里程:编写脚本信息
第二个里程:测试脚本执行情况
第三个里程:把脚本放入定时任务中(绝对路径)
第四个里程:调整时间信息
第五个里程:检查日志信息,查看任务执行结果
测试环境测试定时任务没有问题,执行脚本将线上服务器做改动
compress.sh
#!/bin/bash
tar xxxxx
线下服务器
echo ‘* * * * * * /bin/sh compress.sh’>>/var/spool/cron/root
网友评论