Centos6环境下CI(CodeIgniter)框架创建定时任务
在我们项目开发过程中,经常遇到定时类需求,如果是仅仅一个PHP文件,那么很轻松的知道该怎么配置,但是在框架中,mvc设计思想访问对应控制器下的对应方法,那么就无从下手了。我这里参考网上的例子在自己的服务器上成功实现。
如,我们访问CI项目的URL地址是http://www.testci.com/index.php?c=test&a=index,这里控制器是test,index是方法。
那么我们在Centos6中配置定时任务的格式为
*/1 * * * * /usr/local/php/bin/php /data/wwwroot/default/ci/index.php test index /var/spool/cron/error.log >&1
 
说明
我这里是每分钟一次;
/usr/local/php/bin/php 是php在系统下的安装目录;
/data/wwwroot/default/ci/index.php 是CI的入口文件路径;
/var/spool/cron/error.log >&1是表示记录错误日志到当下目录。
补充:
今天在看一个关于服务器性能测试的视频,视频中说到了一个Linux下的crontab命令,好陌生的一个命令啊,然后查阅资料,写了个小Demo把这个crontab相关的知识总结了一遍,对于我来说,这又是一个新的知识点,每天都在进步。
注:以下总结基于Ubuntu 12.04
去/etc目录下看看
先去Ubuntu的/etc目录下看看,我们都知道/etc目录主要用来存放系统中的配置文件,基本上所有的配置文件都可以在这里找到。运行以下命令看看:
ls /etc/cron*
 
这个命令会列出/etc目录下所有以cron开头的文件和文件夹。可以看到主要有以下文件夹:
  
   - 
    
     
    
    
     
      /etc/cron.hourly 这里存放了每小时需要运行的脚本
     
    
 
   - 
    
     
    
    
     
      /etc/cron.daily 这里存放了每天需要运行的脚本
     
    
 
   - 
    
     
    
    
     
      /etc/cron.weekly 这里存放了每个星期需要运行的脚本
     
    
 
   - 
    
     
    
    
     
      /etc/cron.monthly 这里存放了每月需要运行的脚本
     
    
 
   - 
    
     
    
    
     
      /etc/cron.d 如果既不是按小时,也不按天,周和月来运行,就放在这个文件夹
     
    
 
  
 
原来,我们可以把我们需要定时运行的脚本放到对应的文件夹中,系统就会定时运行对应的脚本了。那么系统是怎么做到的呢?
在/etc目录下,还有一个crontab文件,该文件内容如下:
  
   - 
    
     
    
    
     
      # /etc/crontab: system-wide crontab
     
    
 
   - 
    
     
    
    
     
      # Unlike any other crontab you don't have to run the `crontab'
     
    
 
   - 
    
     
    
    
     
      # command to install the new version when you edit this file
     
    
 
   - 
    
     
    
    
     
      # and files in /etc/cron.d. These files also have username fields,
     
    
 
   - 
    
     
    
    
     
      # that none of the other crontabs do.
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      SHELL=/bin/sh
     
    
 
   - 
    
     
    
    
     
      PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      # m h dom mon dow user command
     
    
 
   - 
    
     
    
    
     
      17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
     
    
 
   - 
    
     
    
    
     
      25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
     
    
 
   - 
    
     
    
    
     
      47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
     
    
 
   - 
    
     
    
    
     
      52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
     
    
 
   - 
    
     
    
    
     
      #
     
    
 
  
 
如果你英语不错的话,阅读上面的英文注释就可以看懂了。crontab文件是一个系统级别的配置文件,里面配置了什么时候去运行什么文件的规则。Linux会定期去扫描对应的文件夹,运行里面的脚本。这就完成了定时执行任务的功能。
cron服务
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
  
   - 
    
     
    
    
     
      service cron start //启动服务
     
    
 
   - 
    
     
    
    
     
      service cron stop //关闭服务
     
    
 
   - 
    
     
    
    
     
      service cron restart //重启服务
     
    
 
   - 
    
     
    
    
     
      service cron reload //重新载入配置
     
    
 
  
 
cron命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而Linux任务调度的工作主要分为以下两类:
- 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;
 - 个人执行的工作:某个用户定期要做的工作,例如每天备份数据库等。
 
在/var/spool/cron/目录下是所有用户的crontab文件,你也可以去看看。上面说到的/etc下的配置都是属于系统级别的,那么个人级别的定时执行如何来做呢?这就需要说到下面的crontab命令了。
crontab命令
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
  
   - 
    
     
    
    
     
      crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
     
    
 
   - 
    
     
    
    
     
      crontab -l //列出某个用户cron服务的详细内容
     
    
 
   - 
    
     
    
    
     
      crontab -r //删除没个用户的cron服务
     
    
 
   - 
    
     
    
    
     
      crontab -e //编辑某个用户的cron服务
     
    
 
  
 
如果不指定用户,就是当前系统的登陆用户。
当你输入命令:crontab -e时,就会出现一个文件,让你填写对应的定时规则,这个规则是什么?
定时规则
看这条规则:
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
 
这就是一条规则,表示每天的6点25分执行对应的脚本。没有看明白,不要紧,容我慢慢道来。
以下是 crontab 文件的格式:
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 
 
- minute:区间为0–59;
 - hour:区间为0–23;
 - day-of-month:区间为0–31;
 - month:区间为1–12;1是1月,12是12月;
 - Day-of-week:区间为0–6;周日是0。
 
除了数字还有以下几个特殊的符号需要特殊说明:*:代表所有的取值范围内的数字;/:代表每的意思,”*/5″表示每5个单位;-:代表从某个数字到某个数字;,:分开几个离散的数字。
以下举几个例子说明问题:
  
   - 
    
     
    
    
     
      每五分钟执行    */5 * * * * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
     
      每小时执行      0 * * * * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
     
      每天执行        0 0 * * * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
     
      每周执行        0 0 * * 0 /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
     
      每月执行        0 0 1 * * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
     
      每年执行        0 0 1 1 * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      每天早上6点     0 6 * * * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
     
      每两个小时      0 */2 * * * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      晚上11点到早上8点之间每两个小时
     
    
 
   - 
    
     
    
    
     
      0 23-7/2 * * * /home/jelly/test.sh
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      1月1日早上4点
     
    
 
   - 
    
     
    
    
     
      0 4 1 1 * /home/jelly/test.sh
     
    
 
  
 
我想这下你应该明白了,如果还没有明白,没问题,再来个实例,你就能明白了。
一个小Demo
先准备以下这么一段简短的脚本:
  
   - 
    
     
    
    
     
      #!/bin/bash
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      var="http://www.jellythink.com"
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      echo $var
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      exit 0
     
    
 
  
 
保存为文件backupDemo.sh。
 bash脚本不懂,没关系,看这里:
在终端输入以下命令:
crontab -e
 
在显示的文件末尾添加以下规则:
*/1 * * * * /home/jelly/MySource/Shell/backupDemo.sh >> /home/jelly/log.log
 
编辑完成,保存完成以后,就会显示以下提示信息:
crontab: installing new crontab
 
这就说明正在安装新的定时任务,如果没有这条提示信息,请重新运行crontab -e命令。
接下来就会看到在/home/jelly目录下会生成一个log.log文件,并写入了输入的信息。
没有问题,搞定了。
总结
本来是中午看的一个视频,没有想到一个小的知识点写出了这么长的一篇文章。好了,还是我不会的东西太多了,继续学习吧。
文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/lxw1844912514/article/details/100174587
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)