我需要创建一个只有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,一切正常,所以我确定脚本没问题。
答案 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上运行