0

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

我根据1and1 FAQ在 crontab 中添加了一个新的 cron 作业,但我不确定我做错了什么,因为 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

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

4

5 回答 5

1

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

现在,它不起作用的原因是您可以通过这种方式将 GET 参数发送到 PHP 文件。PHP 以不同的方式处理命令行。请参阅从命令行使用 PHP

因此,您必须检查是从 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 参数是否存在并使用它们。

于 2012-07-09T20:59:21.287 回答
0

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

crontab -l

列出当前的 cron 作业。

crontab -e

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

于 2012-07-09T20:53:10.550 回答
0

尝试

*/0 */8 * * */1 /usr/local/bin/php -f /homepages/XX...
于 2012-07-09T20:55:35.590 回答
0

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

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

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

?>

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

于 2012-07-09T21:00:15.917 回答
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

于 2012-08-25T16:34:02.150 回答