shell cron job运行一个php文件

时间:2012-07-09 20:49:19

标签: php cron crontab

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

我按照1and1 FAQ在crontab中添加了一个新的cron作业,但是我不确定我做错了什么,因为cron作业根本没有运行。< / p>

这是我通常放在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

我错过了什么或做错了什么?顺便说一句,如果我在浏览器中手动输入URL,一切正常,所以我确定脚本没问题。

5 个答案:

答案 0 :(得分:1)

据我所知,您可以在任何服务器上的cronjob上使用wget,因此如果您继续使用它,那么应该没有问题。

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

因此,您必须检查是否从URL或命令行调用了php文件(这很容易,请查看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参数是否存在并使用它们。

答案 1 :(得分:0)

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

crontab -l

列出当前的cron作业。

crontab -e

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

答案 2 :(得分:0)

尝试

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

答案 3 :(得分:0)

你不能运行带有这样的参数的文件,因为shell正在寻找一个名为“file.php?param = value”的文件,而不是“file.php”。

如果参数始终相同,您可以在脚本中强制设置它们:

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

?>

然后检查脚本是否不需要其他变量,例如$ _SERVER ['REMOTE_ADDR']或类似的东西。

答案 4 :(得分: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上运行