Linux系统之crond

onlykg 2020-02-15

01 Linux系统计划任务

1.Crond计划任务概述

什么是计划任务,计划任务类似于我们平时?活中的闹钟。 在Linux系统的计划任务服务crond可以满?周期性执?任务的需求。crond进程每分钟会处理?次计划任务, 计划任务主要是做?些周期性的任务?前最主要的?途是定时备份数据

Schedule one-time tasks with at. ?次性调度执? at Schedule recurring jobs with cron. 循环调度执? cron Schedule recurring system jobs. 所有计划任务执?中的输出都会以邮件的?式发送给指定?户, 除?重定向

//循环调度执?cron 进程每分钟会处理?次计划任务
[ ~]# systemctl status crond.service
[ ~]# ps aux |grep crond
root        534  0.0  0.1 126232  1592 ?        Ss   06:24   0:00 /usr/sbin/crond -n

计划任务分为以下两种情况:

1.系统级别的定时任务:

清理系统缓存
临时?件清理
系统信息采集
?志?件切割

2.?户级别的定时任务:

定时同步互联?时间
定时备份系统配置?件
定时备份数据库?件

2.crond配置?件详解

?件              说明
/etc/crontab   #Crontab配置?件
/etc/cron.deny  #该?件中所列?户不允许使?crontab命令
/var/spool/cron/*  #所有?户定时?件都存放此?录,?件以?户名命名
/var/log/cron*/  #定时任务执?后的?志?件,可?来回溯

3.crond计划任务管理

参数       含义              指定示例 
[ ~]# crontab --help
-e      编辑crontab?件内容   crontab -e
-l      查看crontab?件内容   crontab -l
-r      删除crontab?件内容   crontab -r
-u      管理其他?户的计划任务  crontab -u xmh -l 
注意: crontab {-l -e}实际上就是在操作/var/spool/cron/username

crond时间含义

# 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 #星期
# | | | | |
# * * * * * command to be executed

# * 表示任意的(分、时、?、?、周)时间都执? 
# - 表示?个时间范围段, 如5-7点 
# , 表示分隔时段, 如6,0,4表示周六、?、四 
# /1 表示每隔n单位时间, 如*/10 每10分钟

crond编写示例

00 02 * * * ls. #每天2:00整
00 02 1 * * ls. #每?1号2:00整
00 02 14 2 * ls #每年2?14号2:00整
00 02 * * 7 ls  #每周?2:00整
00 02 * 6 5 ls  #每年6?的周五2:00整
00 02 14 * 7 ls #每?14号2:00整或每周?2:00整,这两个时间都执?
00 02 14 2 7 ls #每年 2 ? 14 号 2:00 整 或者 每周? 2:00 整,这两个时间都执?
00 06-12/2 * * * #每天早上的6点到12点,每隔2小时
00 02 * * * ls  #每天2:00整
* 02 * * * ls   #每天2:00中的每?分钟 (逻辑错误)
* * * * * ls    #每分钟执? ls
* * 14 2 * ls   #2?14号的每分钟(逻辑错误)
*/5 * * * * ls  #每隔5分钟
00 02 * 1,5,8 * ls #每年1,5,8?的每天2:00整
00 02 1-8 * * ls #每?1到8号的2:00整

crond书写规范

//1.为计划任务增加必要的注释
[ ~]# crontab -l
##time sync by xmh 2018-00-00 */5 * * * * /usr/sbin/ntpdate time.windows.com &>/dev/null

//规范计划任务执?脚本存放的路径/server/scripts/
[ ~]# crontab -l
##backup www to /backup xmh 2018-00-00 
00 01 * * * /bin/sh /server/scripts/www_backup.sh &>/dev/null

//3.执?shell脚本任务前加/bin/sh, 脚本结尾加&>/dev/null 
//调试好后应屏蔽debug输出信息,避免产?系统垃圾占?过多inode, 如需输出?志, 可重定向??志?件
[ ~]# crontab -l 
####backup www to /backup xmh 2018-00-00 
00 01 * * * /bin/sh /server/scripts/www_backup.sh &>/dev/null

4.crond配置编写实例

[ ~]# crontab -e 

//每天凌晨切割nginx?志 
00 00 * * * /bin/sh -x /server/scripts/cut_nginx.sh &> /soft/scripts/log/nginx.log

//每天5点备份数据库 
00 05 * * * /bin/sh -x /server/scripts/dump_sql.sh &>/soft/scripts/log/mysql.log

//每5分钟检测数据库是否正常 
*/5 * * * * /bin/sh /server/scripts/start_mysql.sh &>/dev/null

//注意:
1.我们所有的crond服务是运?的程序。?crontab命令?户?来设置定时规则的命令。
2.crond服务是企业?产?作中常?的重要服务,at很少使?,可以忽略。
3.?乎每个服务器都会?到crond服务。

5.crond计划任务调试

1.调整任务每分钟执?, 检测是否是否正常, 有些任务不要频繁执?
2.调整系统时间然后在检测任务, ?产不建议直接使?此?式
3.执?脚本, 将脚本执?输出写?指定?志?件, 观察?志内容是否正常
4.注意?些任务命令带来的问题 echo “xmh” >>/tmp/xlw.log &>/dev/null
5.命令使?绝对路径, 防??法找到命令导致定时任务执?故障
6.查看/var/log/cron?志进?调试
建议: 建?/server/scripts?录统?存放脚本,将需要定期执?的任务写?脚本中, 脚本中命令必须使?绝对路径,?动执?脚本检测输出是否正常, 然后将脚本加?计划任务测试, 测试 后?问题将脚本输出写?对应的?志?件中即可。

  • 1.?动执?保留执?命令的正确结果
  • 2.编写脚本
    • 脚本需要统?路径/soft/scripts
    • 脚本开头建议填写注释信息, 包括执?时间、周期、任务
    • 脚本内容复制执?成功的命令?脚本?件中(减少每个环节出错?率)
    • 脚本内容尽可能的优化, 使??些变量或使?简单的判断语句
    • 脚本执?的输出信息不要随意打印, 可以重定向?其他位置保留或丢??洞
  • 3.执?脚本
    • 使?bash执?, 防?脚本没有增加执?权限(/usr/bin/bash)
    • 执?命令以及脚本成功后并复制该命令
  • 4.编写计划任务
    • 加上必要的注释信息、?、时间、任务
    • 设定计划任务执?的周期
    • 粘贴执?脚本的命令(不要?敲)
  • 5.调试计划任务
    • 增加任务频率测试、调整系统时间测试(不能?于?产)
    • 检查环境变量问题、检查crond服务产??志进?排查

相关推荐