定时任务

操作系统定时任务介绍

闹钟: 定时间 任务响铃声
概念介绍: 周期性, 让系统完成相应操作任务
作用说明: 1) 周期性, 进行数据备份操作
2) 周期性, 重启服务程序 tomcat--java--耗费内存 移动互联网
3) 周期性, 切割日志信息
4) 周期性, 执行脚本文件

系统定时任务实现方式

利用crond 服务实现定时任务 ******
一个命令: crontab
一个文件: /var/log/cron
利用atd 软件实现定时任务 类似闹钟 一次设置, 只执行一次
利用anacron 软件实现定时任务 系统默认设置定时任务 设置时间不灵活
/etc/cron.daily --- 周期为每天 24小时计算为一天
/etc/cron.hourly --- 周期为每小时
/etc/cron.monthly --- 周期为每个月
/etc/cron.weekly --- 周期为每周

系统定时任务设置方法

准备工作:

  1. 确认是否安装定时任务软件: cronie-1.4.11-19.el7.x86_64
  2. 确认定时任务服务是否启动: systemctl status crond
    准备工作:
  3. 确认是否安装定时任务软件: cronie-1.4.11-19.el7.x86_64
  4. 确认定时任务服务是否启动: systemctl status crond

配置过程:
crontab -l --- 查看系统已有定时任务信息
no crontab for root --- 没有设置定时任务
crontab -e --- 配置系统定时任务信息 (语法检查)
== vim /var/spool/cron/root

编写格式:

          • 任务信息
            时间信息 执行命令

分 < 小时 < 日 < 星期 < 月份

时间信息: 5个星号表示
第一个星号: 分钟 00 ~ 59
第二个星号: 小时 00 ~ 23 24小时制 2点 凌晨/下午
第三个星号: 日期 1 ~ 31
第四个星号: 月份 1 ~ 12
第五个星号: 星期 1 ~ 7 0 ~ 6

时间配置说明
cat /etc/crontab

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

练习:

  1. 每天凌晨2点整, 休息睡觉
    错误: * 02 * * * 休息睡觉
    说明: 2点时间里面, 每分钟都会执行相应任务
    正确; 0 02 * * * 休息睡觉
  2. 每周周五大保健
    错误: * * * * 5 15 周五 00:00
    正确: 00 21 * * 5
  3. 每个月5日 晚上7点整, 周五和女朋友约会
    00 19 5 * 5 约会
    理论: 星期和日期 建议不要同时设置
    实际: 每月5号 19点整会约会
    每星期周五 晚上19点整约会
  4. 每隔2个小时, 喝水
    0 */2 * * *
    奇数小时执行任务

时间符号信息:

  • : 每 每分钟 每小时 每天 每个月 每周几
    */n : 每隔多久 每隔n分钟 每隔n小时
    执行周期是n倍数时间
    */2小时 正确执行 0 2 4 6 8 10 12 14
    */3小时 正确执行 0 3 6 9 12 15 ..
    , : 指定时间完成定时任务
    1,3,5,7
  • : 指定连续时间范围执行定时任务
    00 1-7 * * * echo oldboy67 >>/tmp/test.txt

查看定时任务是否执行:
tail -f /var/log/cron

定时任务设置常见错误

定时任务命令信息尽量使用绝对路径
练习: 每分钟, 执行时间同步任务, ntpdate
编写定时任务:

          • echo $PATH >/tmp/test.txt
            查看执行结果:

cat /tmp/test.txt

/usr/bin:/bin

which ntpdate

/usr/sbin/ntpdate

定时任务命令信息最好不要使用特殊符号
定时任务无法识别特殊符号处理方法:
方法一: 将定时任务命令信息放入到脚本文件中
* * * * * /bin/sh /root/test.sh
方法二: 将特殊符号信息进行转义

          • echo "date +\%F_\%T" >> /tmp/test.txt

定时任务常见错误

  1. 任务命令信息尽量绝对路径 定时任务识别环境变量: PATH=/usr/bin:/bin
  2. 任务命令不要使用特殊符号
    方法一: 将特殊符号命令放入脚本中
    方法二: 将特殊符号进行转义 \
  3. 尽量让定时任务执行时不要产生输出信息(错误输出)
    定时任务操作出错信息会追加到一个邮件文件中
    /var/spool/mail/root 消耗磁盘资源 block

关闭邮件服务, 错误信息不会追加到邮件文件中
systemctl status postfix.service --- 让系统发送邮件信息服务
但是会生成大量小文件信息
/var/spool/postfix/maildrop/ 消耗磁盘资源 inode

处理方法:
第一个里程: 邮件服务开启
systemctl start postfix.service
第二个里程: 定时任务执行时错误信息和正确信息放入到系统黑洞中
/dev/null

crontab -e

          • /usr/bin/cp /oldboy/oldboy.txt /backup &>/dev/null
          • /usr/bin/cp /oldboy/oldboy.txt /backup >/dev/null 2>&1
  1. 尽量给定时任务设置注释说明信息

  2. 大于2个任务需要同一时刻执行, 编写脚本完成多个任务

你可能感兴趣的:(定时任务)