zoukankan      html  css  js  c++  java
  • [转]利用 Linux crontab 定时执行 PHP

    启动linux定时服务:service crond start

    查看当前定时任务: crontab -l

    添加新定时任务:crontab -e

    先是测试crontab对于普通任务能否执行:

    */1 * * * * date >> /opt/web/mydate.log

    保存后重启crontab :
    service crond restart

    Crontab语法

    usage:  crontab [-u user] file

            crontab [-u user] [ -e | -l | -r ]

                    (default operation is replace, per 1003.2)

            -e      (edit user's crontab)

            -l      (list user's crontab)

            -r      (delete user's crontab)

            -i      (prompt before deleting user's crontab)

            -s      (selinux context)

           其中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。

    Crontab 格式说明

           我们可以用crontab -e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。

          

       添加的命令必须以如下格式:

       * * * * * /command path

          

           前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。

    前5个字段分别表示:

           分钟:0-59

           小时:1-23

           日期:1-31

           月份:1-12

           星期:0-6(0表示周日)

    还可以用一些特殊符号:

           *: 表示任何时刻

           ,: 表示分割

      -:表示一个段,如第二端里: 1-5,就表示1到5点

           /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.

    一些示例:

    00 8,12,16 * * * /data/app/scripts/monitor/df.sh

    30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh

    10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh

    10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh

    10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh

    43 21 * * * 21:43 执行

    15 05 * * *    05:15 执行

    0 17 * * * 17:00 执行

    0 17 * * 1 每周一的 17:00 执行

    0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行

    0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行

    0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行

    42 4 1 * *     毎月1日的 4:42分 执行

    0 21 * * 1-6   周一到周六 21:00 执行

    0,10,20,30,40,50 * * * * 每隔10分 执行

    */10 * * * *        每隔10分 执行

    * 1 * * *         从1:0到1:59 每隔1分钟 执行

    0 1 * * *         1:00 执行

    0 */1 * * *        毎时0分 每隔1小时 执行

    0 * * * *         毎时0分 每隔1小时 执行

    2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行

    30 5 1,15 * *       1日 和 15日的 5:30 执行

    首先,确认 PHP 可执行文件的位置 —— 对于大多数 Linux 系统,几乎肯定是 /usr/bin/php。如果不确定其位置,请在命令行中键入 which php 并查看响应内容。
    其次,键入以下代码,确保将 /usr/bin/php 替换为 PHP 可执行文件的实际路径。

    1.<?php 
    2.#!/usr/bin/php -q 
    3.print date("Y-m-d H:i:s")."\n";  4.?> 
    权限与转码

    #chmod +x test.php
    #dos2unix test.php

    Crontab  -e

    按其语法定义即可

    例如5分钟运行一次

     */5 * * * * /website/test.php >> /dev/null &

    或者另外一种形式直接在Crontab中配置

    */2 * * * * /usr/bin/php -f  /var/www/html2 * * * * /usr/bin/php -f  /var/www/html/*.php
       表示每2分钟执行一次/var/www/html/*.php文件
       (注: -f 很重要,不能修改成 -q )

    crontab执行不了php的解决方法

    用crontab跑php程序时,如何去调试,各人有各人的方法。我也有套方法,看一下,我是如何解决crontab执行不了php程序这个问题的。
    一,php文件有没有执行权限

    1. 1.[root@linux cron]# ls -al |grep del   

    1. 2. -rwxr-xr-x  1 zwh  ftpgroup  494 10-20 16:42 del_redis.php  
    复制代码

    如果没有X,说明没有执行权限,当然也执行不了。如果你不知道你登录的用户所在的组是不是有权限,直接给所有组都加上权限就行了。方法如下:

    1. [root@linux cron]# chmod +x ./del_redis.php
    复制代码

    二,如果有执行权限了,还是执行不了解决方法如下:

    1,在php程序里面写log(例如:error_log()这个函数),这也是必须的,因为crontab定时执行,要是没有log,你怎么知道程序执行的结果怎么样。这样我们可以通过log来查看crontab执行的情况。

    2,也可以直接在crontab里面,将执行的结果输出一个文件当中。然后在这个文件当中查看执行情况。例如:

    1. 1.*/10 * * * * /usr/local/php/bin/php /var/www/cron/del_redis.php >> /home/zhangy/cron.txt  
    复制代码

           3,用crontab来执行php,是不走apache,nginx,所以$_SERVER,$_ENV这类变量根本用不了。所以检查一php     代码中有没有这类变量,如果有拿掉。

    4,php的相对路径问题

    因为有思维定势在做怪,这个问题也是最容易忽视的。

    1. 1.include_once'./mysql.php';  
    复制代码

    当php代码中,用的是相对路径时,只有进入到那个目录下执行/usr/local/php/bin/php /var/www/cron/level_rank.php才能生效。这个问题我遇到过至少二次,但是再遇到时还是想不起来。解决方法如下:

    1. 1.*/10 * * * * cd /var/www/cron && /usr/local/php/bin/php /var/www/cron/level_rank.php  
    复制代码

    也可以直接在php代码中用绝对路径

  • 相关阅读:
    Redis 集群搭建详细指南
    java 获取properties的几种方式
    redis主从,哨兵集群
    Nginx服务器之负载均衡策略
    Redis中常用命令
    Java中使用Jedis操作Redis
    redis学习教程网站
    Redis 数据备份与恢复
    CentOS6.5 在线安装Redis5.0.9
    nginx中文学习网站(推荐)
  • 原文地址:https://www.cnblogs.com/yimu/p/2838525.html
Copyright © 2011-2022 走看看