解决方案 »

  1.   


    我是网上看这些资料弄出来的啊,还是每10分种分执行一次test.php文件。。不知道哪里出问题。。
      

  2.   


    资料上面那个*/10 * * * * ( lockf -s -t 0 /tmp/create.lock /usr/bin/python /home/project/cron/create_tab.py  
                        >> /home/project/logs/create.log 2>&1)
    是不行的,我的服务器不支持lockf,所以用的是flock
      

  3.   

    你每次设置完crontab之后要重新加载的,最好是重启一下服务service crond restart试试
      

  4.   


    flock -xn /var/www/html/create.lock -c '/usr/bin/php /var/www/html/test.php'
    控制台上面这样执行,每次都会更新一次create.lock,因为修改日期变成最新的了,说明有没有create.lock这个文件还是会执行test.php啊
      

  5.   


    service crond restart了还是每次都执行test.php
      

  6.   

    运行不运行test.php不是关键问题,问题是有没有阻止了test.php里的相关逻辑代码的执行。你可以在test.php里一开始就判断该不该执行后面的代码。
    当然,能直接不执行test.php是最好的。
      

  7.   


    我现在也想做个判断不执行test.php里面的代码,但是不知道怎么判断,我想加载一个文件,文件里面只有一个变量,变量为1就执行,为0就不执行。。
    但是好像行不通,逻辑不通,第一次执行设变量为1.。然后怎么让它变成0不执行第二次(第一次还没完成的时候)?
      

  8.   

    如果要在test.php里面判断,有很多方法,就你说的,变量,某次开始执行时改变缓存变量为0,执行完成后将变量设置为1。
    至于变量的保存,可以存很多地方:比如利用缓存,比如文本文件,比如数据库,所有能持久化,或者跨页面的都行。
      

  9.   

    那你写个shell脚本,判断.lock文件是否存在,存在就不执行,不存在就执行,或者你通过php执行exec(),相应的判断文件即可。
      

  10.   

    可将判断写在php里*/10 * * * * /usr/bin/php /var/www/html/test.php在test.php 裡面,開頭if(file_exists('/tmp/create.lock')){
    exit();
    }else{
    file_put_contents('/tmp/create.lock', 1, true);
    }然後在程序最後
    unlink('/tmp/create.lock');
      

  11.   


    我就是这样想的,是用文本文件存变量的。。初始变量为1,第一次开始执行后设变量为0,执行完变量为设为1。但是就只执行一次,之后这变量一直都是0。。
    我想可能是第一次没执行完,第二次又来了,所以排着队在那等第二次执行,而第二次执行使用的变量是0,并不是用第一次执行完后设为1的变量,然后第二次开始时又马上又把变量设成0了。。所以变量一直是0,就只执行了一次你逻辑不对,按你一开始说的,10分钟执行一次,如果已经有任务在执行的,这次就不执行了,那还有什么排队的问题?直接再过10分钟执行就完了。因为是执行同一个文件test.php,第一次没执行完,第二次执行好像会卡在那里,等第一次完了后才继续第二次执行
      

  12.   


    是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.php
      

  13.   


    是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.phpif(file_exists('/tmp/create.lock')){
    exit();存在怎麼會執行下去呢?
      

  14.   


    是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.phpif(file_exists('/tmp/create.lock')){
    exit();存在怎麼會執行下去呢?是crontab中的定时器会执行test.php文件。。这个文件判断跟变量一样的,第一次没执行完,第二次会卡在那里排队,
      

  15.   

    if(file_exists('/tmp/create.lock')){
    exit();}
    已经exit了,怎么会排队?
      

  16.   


    好像排完队后才执行exit。。第一个任务没执行完前会卡在那。不知道服务器自动执行是不是这样。。我在浏览器上测试是这样,用浏览器打开执行第一次任务,然后接着再开一个窗口执行第二次任务,然后第二次就在那转,第一次没执行完第二次在那等的,
      

  17.   

    参考一下
    http://blog.csdn.net/fdipzone/article/details/38284009