我的托管服务提供商只允许我每2小时运行一次cronjob。因为我需要它每秒运行一次,所以我创建了一个运行2小时的页面。另外,我用ZF开发了;所以页面需要被引导,这意味着cronjob需要调用一个Web地址。
到目前为止,我的bash脚本每两个小时运行一次:
#!/bin/bash
wget "http://www.mysite.co.za/ajax/cron"
然而,几分钟后它会停止并出现以下错误:
--2011-02-04 09:32:32-- http://www.mysite.co.za/ajax/cron
Resolving www.mysite.co.za... 123.40.97.157
Connecting to www.mysite.co.za|123.40.97.157|:80... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
2011-02-04 09:37:33 ERROR 500: Internal Server Error
我对cronjobs / bash脚本了解不多,但我认为它已超时了?谁能证实这一点?如果是这样,我将调查curl_mutl_init以发回响应并同时保持进程处于活动状态 - 我认为我无法访问进程控制功能。
如果有人有任何提示/建议,请不要犹豫。
答案 0 :(得分:1)
几条评论意见:
<强> 1。自举强>
使用引导程序的ZF任务不需要通过HTTP请求。您可以运行使用引导程序的命令行任务。
在my_script.php
- 通常位于目录scripts
或application/scripts
中 - 您可以从与网络应用的index.php
文件相同的内容开头:check /设置include_path
,检查/设置APPLICATION_ENV
,检查/设置APPLICATION_PATH
,然后实例化Zend_Application
对象。
唯一的区别是您致电$application->bootstrap()
,但不继续$application->run()
。实际上,由于只有 web 应用程序可能需要某些引导资源,因此您可以调用:
$application
->bootstrap('necessaryResource1')
->bootstrap('necessaryResource2')
->bootstrap('necessaryResource3');`
所以你不要引导你不需要的资源。
然后继续执行任务的具体细节。
<强> 2。命令行
如果您希望设计脚本以接受参数,可以使用Zend_Console_GetOpt
。这很酷。
第3。一旦每秒吗
当然,我不知道你的用例或你的具体需要,但是每秒运行一次工作对我来说确实听起来很多。是否可以将其中一些任务放入队列并使用您托管下允许的频率使用队列?
希望这有帮助!
答案 1 :(得分:0)
如果您的cron需要每秒运行一次,那么使用页面加载来触发您的脚本可能会更好。因此,每当有人请求新页面时,它都会运行该脚本。无论如何,Cron无法在不到一分钟的时间间隔内运行。
您还可以编写具有以下代码的PHP脚本
continuous.php:
while(true){
sleep(1); //pause 1 second
exec("wget http://youraddress.com");
}
bash脚本,看看你的php脚本是否正在运行
checkContinuous.sh
#!/bin/sh
#check if script is running
CHECK=`ps -ef |grep continuous.php`;
if [ -z "$CHECK" ]; then
#script not running, start it
php /path/to/continuous.php& ; #start script and fork it
fi;
希望有所帮助!
答案 2 :(得分:0)
您正在使用的任何后端服务器端脚本,请求它运行无限长时间或忽略用户中止。
你的网络服务器可能有一些设置来增加超时时间..(Apache有它,我已经使用过这个功能)