Linux中的计划任务Crontab

Linux中的计划任务Crontab,为什么要在Linux中使用计划任务?工作中会遇到的困难:每分钟都需要执行一个程序检查系统运行状态,每天凌晨需要对过去一天的业务数据进行统计,每个星期需要把日志文件备份,每个月需要把数据库进行备份。有计划任务可以方便的对Linux进行预操作,本课程由慕课网Petter老师讲解。
 
课程内容
一、CRONTAB是什么
是一个用于设置周期性被执行的任务的工具
被周期性执行的任务称之为Cron Job
周期性执行的任务列表称之为Cron Table
二、CRONTAB实践
1、相关工具
   Putty:一个免费的易用的SSH连接工具  下载地址:http://putty.org/
   点击下载,找到A.ZIP file containing all the bianries (except PuTTYtel),and also the help files下载,双击putty_zh.exe打开安装,输入IP、端口、连接类型,找到会话打开即可。
2、安装并检查Crontab服务
   检查cron服务:
   检查crontab工具是否安装或者工具计划的列表:crontab -l
   检查crond服务是否启动:service crond status  #service 服务名称 status   ,status可以去掉,查询services crond 可以使用的命令,服务后面都会加字母d
   windows 中cmd输入 services回车(还是点击本地服务)即可查看Windows的服务
   安装cron
   yum install vixie-cron    yum install crontabs
   例子:每分钟都打印当前时间到一个日志文件中
   crontab -e
   按G定位到最下面一行,输入下面
   */1 * * * * date >> /tmp/log.txt
   输入Esc 
   :wq
   tail -f /tmp/log.txt        #不断的更新显示这个文件后面几行的内容
3、Crontab的基本组成
crontab(配置工具:用于调整定时任务)写入配置文件(文件方式设定的任务)crond(系统服务:每分钟都会从配置文件刷新定时任务)
crontab的配置文件格式
* * * * * [用户名] COMMAND
↓↓ ↓ ↓ ↓
↓↓ ↓ ↓→→→星期0-7(0或7表示星期天)
↓↓ ↓→→→月份1-12
↓↓→→→日起1-31
↓→→→小时0-23
→→→分钟0-59
例子:每晚21:30重启apache(*代表任意,/代表每隔,,代表准点时间,-代表区间)
30 21 * * * service httpd restart
      每月1、10、22日的4:45重启apache
45 4 1,10,22 * * service httpd restart
      每月1到10号的4:45重启apache
45 4 1-10 * * service httpd restart
      每隔2分钟重启apache
*/2 * * * * service httpd restart   或者 1-59/2 * * * * service httpd restart
      晚上11点到早上7点之间,每隔一小时重启apache
0 23-7/1 * * * service httpd restart     #23-7/1  23点到7点每隔一小时
      每天18:00至23:00之间每隔30分钟重启apache
0,30 18-23 * * * service httpd restart  或者  0-59/30 18-23 * * * service httpd restart
0-59/2 * * * * 奇数分钟   0-58/2 * * * * 偶数分钟
注释:
4、Crontab工具的使用
   crontab -help
   crontab [-u user] file
   crontab [-u user] [-e | -l | -r]
   crontab [选项]
          -e        #编辑用户计划
          -l        #查看用户计划列表,默认显示当前用户的计划列表
          -r        #删除用户计划
          -i        #删除用户计划前提示
          -s        #selinux context
   Crontab配置文件
   全局(系统、Root)配置文件:/etc/conrab
   Root配置文件:只有root用户才会把这些内容载入到计划任务列表中
   
5、Crontab的日志
   tail -f /var/log/cron     /var/log/cron保存cron所有的任务执行记录,每天单独保存
6、Crontab常见错误
   环境变量
   讲的不明确,没记录
   命令行双引号中使用%时,未加反斜线\
   第三(天)和第五个域(星期)之间执行的是“或”操作
   错误例子:四月的第一个星期日早晨1时59分运行a.sh
             59 1 1-7 4 0 /root/a.sh
             而实际执行是:1-7 和 0 是或的关系,即4月份的1-7号每天都执行,并且当天是星期日的时候也会执行,至少执行了7+3次
   正确写法:59 1 1-7 4 * test `date + \%w` -eq 0 && /root/a.sh
             #date + \%w 值为1 ;test `date + \%w` -eq 0  判断是否eq(=)0,执行判断的命令是echo $?(判断正确为0,判断失败为1);注意%w未加\是不能执行的;
   分钟设置误用
   每两小时运行一次:0 */2 * * * date    注意分钟是需要写0的,不然*代表所有分钟
   每两分钟运行一次:0-59/2 * * * * 奇数分钟,也是每2分钟执行一次   注意:命令是先满足1-59分钟条件,然后才是每隔2分钟执行
7、CRONTAB补充
如果想没半分钟执行某个命令怎么办?
通过SHELL脚本的sleep命令配合crontab完成这一功能
date && sleep 0.5s && date
data;sleep 0.5s;date              # ;号代表不论前面是否成功执行,后面都会执行
例子:通过2个步骤满足上面的问题,即第一步执行原来的每分钟执行一次的命令,第二步执行让第二个命令每分钟执行命令休眠30秒再执行,总体相当于每30秒执行一次。
*/1 * * * * echo "wan"
*/1 * * * * sleep 30s;echo "wan"
以此扩展每分钟执行5次、甚至10次都可以
请按F5,刷新后再评论
  • 全部评论(0
    还没有评论,快来抢沙发吧!