2012-07-09 63 views
0

我需要创建一个cron作业,我只有shell访问权限。我知道如何用cPanel做到这一点,但这是在1and1服务器上,所以我必须使用shell。shell cron job运行一个php文件

我得到的部分,我在crontab中添加一个新的cron作业,按照1and1 FAQ,但我不知道我做错了什么,因为cron作业根本没有运行。

这就是我通常放的cPanel:

0 8 * * 1 wget 'http://my_www_domain/googlefroogle.php?feed=fy_uy_tp&key=XXXXX3f7d1' 

这是我在我现在的crontab:

0 8 * * 1 /usr/local/bin/php /homepages/XX/XXXXXXX/htdocs/googlefroogle.php?feed=fy_uy_tp&key=XXXXX3f7d1 

我缺少什么或者做错了吗?顺便说一句,如果我手动输入网址在我的浏览器中,一切正常,所以我敢肯定脚本是好的。

回答

0

没有回答这些问题帮我做什么,我需要让我结束了使用这是所谓的用crontab以下PHP文件:

$data = array('feed'=>'fy_uy_tp','key'=>'MY_KEY_HERE'); 
$url = http_build_query($data, '', '&'); 
$fullurl = 'http://www.MYSITE.com/googlefroogle.php?'.$url; 

$ch = curl_init($fullurl); 
$fp = fopen("MY_LOG_FILE.txt", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

万一别人需要类似的东西......另外,还要注意这需要php5,http_build_query不能在php4上工作

0

您仍然可以在通过shell管理的crontab中使用您的cPanel“命令”。 使用

crontab -l 

要列出当前的cron作业。

crontab -e 

要编辑crontab。您需要在一些最小安装上手动安装crontab。

0

尝试

*/0 */8 * * */1 /usr/local/bin/php -f /homepages/XX... 
1

据我所知,你可以在任何服务器上的一个cronjob使用wget,因此如果您继续使用这种方式应该是没有问题的。

现在,它不工作的原因是因为你可以通过这种方式发送GET参数到PHP文件。 PHP以不同的方式处理命令行。请参阅Using PHP from the command line

所以你必须检查php文件是从URL调用还是从命令行调用(这很容易,看看php_sapi_name),如果是这样的话,使用命令行界面获取参数或在脚本中定义它们。

if (php_sapi_name() == 'cli') { 
    if ($argc != 3) { 
     die(sprintf('Usage: %s <feed> <key>', $argv[0])); 
    } 

    $feed = $argv[1]; 
    $key = $argv[2]; 
}else{ 
    $feed = isset($_GET['feed']) ? $_GET['feed'] : null ; 
    $key = isset($_GET['key']) ? $_GET['key'] : null ; 
} 

现在你必须这样调用脚本在您的cronjob:

php -f file.php fy_uy_tp XXXXX3f7d1 

它能做什么,是如果脚本是从命令行中运行,它得到的参数作为变量,如果不,然后它检查GET参数是否存在并使用它们。

+0

呃...我可以请求更多的帮助吗?我是一个完全noob当谈到壳,所以我不知道如何做到这一点,或者我应该如何将这些参数追加到我的文件。你有可能给我更详细的指示吗? – user1078494 2012-07-09 21:28:43

+0

我更新了我的答案,但请写下文档。在命令行文档的“用法”部分中,有一个关于如何将参数传递给从命令行调用的文件的示例。 – 2012-07-09 23:05:35

0

由于shell正在查找名为“file.php?param = value”的文件,而不是“file.php”,因此无法运行带有这种参数的文件。

如果参数都是一样的,你可以在脚本中力来设定它们:

<?php 
    $_GET['feed'] = 'fy_uy_tp'; 
    $_GET['key'] = ... 
    $_REQUEST = $_GET; 

?> 

,然后检查脚本并不需要一些其他变量,如$ _ SERVER ['REMOTE_ADDR ']或类似的东西。