定时任务
Posted 晨曦007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定时任务相关的知识,希望对你有一定的参考价值。
什么是定时任务
1. 定时任务:固定时间,或者周期性的执行一项任务
2. 定时软件可以每天每小时按需求重复的执行一项工作
3. 用法:
- 用户定时任务:
- cron ——是软件名
- crond ——是服务进程名
- crontab ——命令是用来设置定时任务规则的配置命令
- 系统定时任务:系统自动执行,不用人为干预
- /etc/cron.daily/logrotate /etc/logrotate.conf
### 计划任务主要分为以下两种使用情况:
系统级别的定时任务: 临时文件清理、系统信息采集、日志文件切割
用户级别的定时任务: 定时向互联网同步时间、定时备份系统配置文件、定时备份数据库的数据
定时文件位置 /var/log/cron
定时任务书写规范
1. crontab ——定时任务(存放位置:/var/spool/cron/)
- -l ——查看已有的定时任务
- -e ——编辑定时任务
- -u user——查看指定用户的定时任务
- -r ——删除
- -i 删除需要确认
2. 语法:
- 第一列:分 minute (0-59)
- 第二列:时 hour (0-23)
- 第三列:日 day (1-31)
- 第四列:月 month (1-12)
- 第五列:周 week (0-6)
- 第六列:要执行的任务或程序
3. 特殊符号:
* ---表示每
- 一个连续的区间
, ——表示分割时段
/n ——n是任意数字,表示每隔n单位时间
定时任务中,百分号%要加反斜线转意
定时任务规范:
1. 为定时任务加必要的注释(什么任务、什么时间、谁执行)
2. 所有定时任务尽量以脚本形式运行
3 .通过查找/var/log/cron中执行的记录,去推算任务执行的时间
4. 执行shell脚本前加上/bin/sh
5. 定时任务中命令和脚本的结尾加上 >/dev/null 2>& (尽量避免输出) 或者 &>/dev/null
6. 在指定的用户下执行相关的定时任务
7. 生产任务计划程序中不要随意打印输出信息
8. 定时任务执行的脚本要存放在规范路径下/server/scripts
9. 配置定时任务要规范操作过程,减少出错
10. 定时任务中程序命令及路径尽量用全路径
11. 时间变量%百分号要用反斜线转义(只有定时任务里是命令时需要)
12. 若脚本中调用了系统环境变量,要重新定义
13. 定时任务出错或无法执行,就检查/var/log/cron 日志
练习
考试题:每天晚上00点10分,打包备份如下文件(/etc/rc.local,/var/spool/cron/root,/etc/hosts),
使用2021-06-09时间作为压缩包文件名的一部分,备份到/backup目录下。
1)命令行命令搞定
mkdir /backup -p
tar zcf /backup/conf_$(date +%F).tar.gz /etc/rc.local /var/spool/cron/root /etc/hosts
ls /backup/
2)写定时任务
10 00 * * * /bin/tar zcf /backup/conf_$(date +%F).tar.gz /etc/rc.d/rc.local /var/spool/cron/root /etc/hosts
上述操作是有问题。
定时任务书写要领:
1)定时任务后面执行的命令不能有百分号,如果非要有就转义 \\%
2)定时任务尽量用脚本(命令放到文件里)。脚本结尾加.sh
3)/bin/sh 脚本全路径
4)结尾记得 &>/dev/null或者>/dev/null 2>&1
生产写定时任务步骤:
1)命令行命令搞定
mkdir /server/scripts/ -p #脚本存放地
mkdir /backup -p
tar zcf /backup/conf_$(date +%F).tar.gz /etc/rc.local /var/spool/cron/root /etc/hosts (#软链接记得czfh)
ls /backup/
2)放入文件
[root@oldboy scripts]# cat tar.sh
/bin/tar zcf /backup/conf_$(date +%F).tar.gz /etc/rc.local /var/spool/cron/root /etc/hosts
3)命令行执行脚本
/bin/sh /server/scripts/tar.sh
4)编辑定时任务
[root@oldboy scripts]# crontab -l|tail -2
#####
10 00 * * * /bin/sh /server/scripts/tar.sh &>/dev/null
5)测试
测试过程最好【线下测试环境】
/bin/sh /server/scripts/tar.sh
真正观察结果。调节每分钟。
#就是用命令转义实现:
* * * * * /bin/tar zcf /backup/conf_$(date +\\%F).tar.gz /etc/rc.d/rc.local /var/spool/cron/root /etc/hosts
#调试方法
>/var/log/cron #清空日志便于观察
[root@oldboy scripts]# ls /backup/
conf_2030-06-09.tar.gz
[root@oldboy scripts]# grep tar /var/log/cron
Jun 9 00:21:01 oldboy CROND[2549]: (root) CMD (/bin/tar zcf /backup/conf_$(date +%F).tar.gz /etc/rc.d/rc.local /var/spool/cron/root /etc/hosts)
Jun 9 00:22:01 oldboy CROND[2566]: (root) CMD (/bin/tar zcf /backup/conf_$(date +%F).tar.gz /etc/rc.d/rc.local /var/spool/cron/root /etc/hosts)
##遇到问题
/var/log/cron看日志
百度下
以上是关于定时任务的主要内容,如果未能解决你的问题,请参考以下文章