一、计划任务概述
1、计划任务概述:
- 计划任务分为:
- 一次性任务
- 周期性任务
- 在Linux系统的计划任务服务crond 可以满足周期性执行任务的需求。
- crond进程每分钟会处璇一次计划任务,计划任务主要是做一些周期性的任务目前最主要的用途是定时备份数据。
2、计划任务示例:
- Schedule one-time tasks With at.一 次性调度执行at
- Schedule recurring jobs with cron.循环调度执行cron
- Schedule recurring system jobs. 所有计划任务执行中的输出都会以邮件的方式发送给指定用户,除非重定向
3、计划任务分为以下两种情况:
- 系统级别的定时任务:(由系统管理)
- 清理系统缓存
- 临时文件清理
- 系统信息采集
- 日志文件切割
- 用户级别的定时任务:(用户管理)
- 定时同步互联网时间
- 定时备份系统配置文件
- 定时备份数据库文件
二、crond配置文件详解
1、总览配置文件详解
文件 说明 /etc/crontab //crontab配置文件 /etc/cron.deny //该文件中所列用户不允许使用c rontab命令 /var/spool/cron/* //所有用户定时文件都存放此目录,文件以用户名命名 /var/log/cron //定时任务执行后的日志文件,可用来回溯
2、/etc/crontab文件详解
SHELL=/bin/bash //当前登陆的shell,执行脚本的就是用/bin/bash来执行 PATH=/sbin:/bin:/usr/sbin:/usr/bin //命令的路径,执行的命令必须用绝对路径 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 //执行的命令
2、/etc/cron.deny
计划任务默认是root用户,并且root用户不受该文件的约束,写入该文件的用户将无法写计划任务
3、/var/spool/cron/*
该文件下的是以用户名命名的计划任务文件,文件写的是计划任务的所执行的
4、/var/log/cron
计划任务执行后的日志文件,在该日志文件里面所记录的日志可以恢复误删的计划任务文件
三、计划任务管理
1、计划任务管理
参数 含义 指定示例 [root@wangqing ~]# crontab --help -e 编辑crontab文件内容 crontab -e -1 编辑crontab文件内容 crontab -e -r 删除crontab文件内容 crontab -r -u 管理其他用户的计划任务 rontab -u wangqing -l 注意: crontab {-l -e}实际上就是在操作/var/spool/cron/username
2、计划任务书写规范
//1.为计划任务增加必要的注释 [root@wangqing ~]# crontab -l ##time sync */5 * ***/usr/sbin/ntpdate t ime1.aliyun. com &>/dev/null //2.规范计划任务执行脚本存放的路径/scripts/ [root@wangqing ~]# crontab -1 ##backup wwW to / backup 30 01 * * * /bin/sh /scripts/www_ backup.sh &>/dev/null //3.执行shell脚本任务前加/ bin/sh,脚本结尾加&>/dev/null //调试好后应屏蔽debug输出信息,避免产生系统垃圾占用过多inode,如需输出日志,可重定向至 日志文件 [root@wangqing ~]# crontab -l ####backup wwW to /backup 30 01 * * */bin/sh /scripts/www_ backup.sh &>/ tmp/ WWW_ backup. log
四、计划任务编写实例
1、计划任务编写实例
[rootwangqing ~]# crontab -e #每天凌晨切割nginx日志 05 00***/bin/bash -x /scripts/cut_ _nginx.sh &> /scripts/log/nginxI log #每天5点备份数据库 00 05 * * * /bin/bash -x /scripts/dump_ sql.sh &>/scripts/ log/mysql.log
2、注意事项
//注意: 1.我们所有的crond服务是运行的程序。而crontab命令用户用来设置定时规则的命令。 2. crond服务是企业生产工作中常用的重要服务,at很少使用,可以忽略。 3.几乎每个服务器都会用到crond服务。
五、计划任务调试
1、计划任务调试准则
调整任务每分钟执行,检测是否是否正常,有些任务不要频繁执行. 调整系统时间然后在检测任务,生产不建议直接使用此方式 执行脚本,将脚本执行输出写入指定日志文件,观察日志内容是否正常 注意- -些任务命令带来的问题echo“wangqing" >>/tmp/test.log &>/dev/null 命令使用绝对路径,防止无法找到命令导致定时任务执行故障 查看/var/log/cron日志进行调试
2、计划任务调试建议
//建议: 将需要定期执行的任务写入脚本中,建立/scripts目录统- -存 放脚本,脚本中命令必须使用绝对路径,手动执行脚本检测输出是否正常,然后将脚本加入计划任务测试,测试后无问题将脚本输出写入对应的日志文件中即可。
3、计划任务添加步骤:
- 手动执行保留执行命令的正确结果;
- 编写脚本:
- 脚本需要统一路径/scripts
- 脚本开头建议填写注释信息,包括执行时间、周期、任务
- 脚本内容复制执行成功的命令至脚本文件中(减少每个环节出错几率)
- 脚本内容尽可能的优化,使用- -些变量或使用简单的判断语句
- 脚本执行的输出信息不要随意打印,可以重定向至其他位置保留或丢入黑洞
- 执行脚本:
- 使用bash执行,防止脚本没有增加执行权限(/bin/bash)
- 执行命令以及脚本成功后并复制该命令
- 编写计划任务:
- 加上必要的注释信息,人、时间、任务
- 设定计划任务执行的周期
- 加入执行脚本的命令
- 调试计划任务
- 增加任务频率测试、调整系统时间测试(不能用于生产)
- 检查环境变量问题、检查crond服务产生日志进行排查