怎么在定时器crontab中使用flock文件锁? 参考 http://hi.baidu.com/jakisou/item/fdd116ea2ed075f6e0a5d4c2 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是网上看这些资料弄出来的啊,还是每10分种分执行一次test.php文件。。不知道哪里出问题。。 资料上面那个*/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 你每次设置完crontab之后要重新加载的,最好是重启一下服务service crond restart试试 flock -xn /var/www/html/create.lock -c '/usr/bin/php /var/www/html/test.php'控制台上面这样执行,每次都会更新一次create.lock,因为修改日期变成最新的了,说明有没有create.lock这个文件还是会执行test.php啊 service crond restart了还是每次都执行test.php 运行不运行test.php不是关键问题,问题是有没有阻止了test.php里的相关逻辑代码的执行。你可以在test.php里一开始就判断该不该执行后面的代码。当然,能直接不执行test.php是最好的。 我现在也想做个判断不执行test.php里面的代码,但是不知道怎么判断,我想加载一个文件,文件里面只有一个变量,变量为1就执行,为0就不执行。。但是好像行不通,逻辑不通,第一次执行设变量为1.。然后怎么让它变成0不执行第二次(第一次还没完成的时候)? 如果要在test.php里面判断,有很多方法,就你说的,变量,某次开始执行时改变缓存变量为0,执行完成后将变量设置为1。至于变量的保存,可以存很多地方:比如利用缓存,比如文本文件,比如数据库,所有能持久化,或者跨页面的都行。 那你写个shell脚本,判断.lock文件是否存在,存在就不执行,不存在就执行,或者你通过php执行exec(),相应的判断文件即可。 可将判断写在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'); 我就是这样想的,是用文本文件存变量的。。初始变量为1,第一次开始执行后设变量为0,执行完变量为设为1。但是就只执行一次,之后这变量一直都是0。。我想可能是第一次没执行完,第二次又来了,所以排着队在那等第二次执行,而第二次执行使用的变量是0,并不是用第一次执行完后设为1的变量,然后第二次开始时又马上又把变量设成0了。。所以变量一直是0,就只执行了一次你逻辑不对,按你一开始说的,10分钟执行一次,如果已经有任务在执行的,这次就不执行了,那还有什么排队的问题?直接再过10分钟执行就完了。因为是执行同一个文件test.php,第一次没执行完,第二次执行好像会卡在那里,等第一次完了后才继续第二次执行 是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.php 是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.phpif(file_exists('/tmp/create.lock')){exit();存在怎麼會執行下去呢? 是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.phpif(file_exists('/tmp/create.lock')){exit();存在怎麼會執行下去呢?是crontab中的定时器会执行test.php文件。。这个文件判断跟变量一样的,第一次没执行完,第二次会卡在那里排队, if(file_exists('/tmp/create.lock')){exit();}已经exit了,怎么会排队? 好像排完队后才执行exit。。第一个任务没执行完前会卡在那。不知道服务器自动执行是不是这样。。我在浏览器上测试是这样,用浏览器打开执行第一次任务,然后接着再开一个窗口执行第二次任务,然后第二次就在那转,第一次没执行完第二次在那等的, 参考一下http://blog.csdn.net/fdipzone/article/details/38284009 我用php编写的程序传给客户后,出现不能浏览的问题,目录也都不能浏览 Apache 添加php5apache2-2.dll就不能启动 急求 无法创建图像流 有关php 请教PHP EXCEL如何获取行数?? 如果上传的图像为GIF动画,那么上传后改称jpg的后缀名有关系吗? 数据库写入问题。。。 PHP中怎么用SQL把一些数据资料导出到本地电脑呢 用PHP INSERT data 的问题 (Oracle9i) PHP编写登录系统 $_SERVER['REMOTE_ADDR']返回值为::1怎么改成ipv4的ip地址 PHP如何接收javascript POST的数据?
我是网上看这些资料弄出来的啊,还是每10分种分执行一次test.php文件。。不知道哪里出问题。。
资料上面那个*/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
flock -xn /var/www/html/create.lock -c '/usr/bin/php /var/www/html/test.php'
控制台上面这样执行,每次都会更新一次create.lock,因为修改日期变成最新的了,说明有没有create.lock这个文件还是会执行test.php啊
service crond restart了还是每次都执行test.php
当然,能直接不执行test.php是最好的。
我现在也想做个判断不执行test.php里面的代码,但是不知道怎么判断,我想加载一个文件,文件里面只有一个变量,变量为1就执行,为0就不执行。。
但是好像行不通,逻辑不通,第一次执行设变量为1.。然后怎么让它变成0不执行第二次(第一次还没完成的时候)?
至于变量的保存,可以存很多地方:比如利用缓存,比如文本文件,比如数据库,所有能持久化,或者跨页面的都行。
exit();
}else{
file_put_contents('/tmp/create.lock', 1, true);
}然後在程序最後
unlink('/tmp/create.lock');
我就是这样想的,是用文本文件存变量的。。初始变量为1,第一次开始执行后设变量为0,执行完变量为设为1。但是就只执行一次,之后这变量一直都是0。。
我想可能是第一次没执行完,第二次又来了,所以排着队在那等第二次执行,而第二次执行使用的变量是0,并不是用第一次执行完后设为1的变量,然后第二次开始时又马上又把变量设成0了。。所以变量一直是0,就只执行了一次你逻辑不对,按你一开始说的,10分钟执行一次,如果已经有任务在执行的,这次就不执行了,那还有什么排队的问题?直接再过10分钟执行就完了。因为是执行同一个文件test.php,第一次没执行完,第二次执行好像会卡在那里,等第一次完了后才继续第二次执行
是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.php
是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.phpif(file_exists('/tmp/create.lock')){
exit();存在怎麼會執行下去呢?
是啊,是这样。。但是文件锁好像没起作用,有create.lock存在也会执行test.phpif(file_exists('/tmp/create.lock')){
exit();存在怎麼會執行下去呢?是crontab中的定时器会执行test.php文件。。这个文件判断跟变量一样的,第一次没执行完,第二次会卡在那里排队,
exit();}
已经exit了,怎么会排队?
好像排完队后才执行exit。。第一个任务没执行完前会卡在那。不知道服务器自动执行是不是这样。。我在浏览器上测试是这样,用浏览器打开执行第一次任务,然后接着再开一个窗口执行第二次任务,然后第二次就在那转,第一次没执行完第二次在那等的,
http://blog.csdn.net/fdipzone/article/details/38284009