定时任务

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单位时间
   定时任务中,百分号%要加反斜线转意

img

定时任务规范:

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看日志
百度下

以上是关于定时任务的主要内容,如果未能解决你的问题,请参考以下文章

Celery实现定时任务crontab

以代码的方式管理quartz定时任务的暂停重启删除添加等

Laravel实现定时任务的示例代码

asp.net 定时器 定时执行任务

MySQL定时执行脚本(计划任务)实例

动态创建管理定时任务-已完成