2019-07-31定时任务
2019-07-31 本文已影响0人
麟之趾a
定时任务
定时任务实现方法
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