php cron脚本不从命令行读取参数

时间:2012-08-20 20:45:06

标签: php cron switch-statement crontab

我有两个档案。

一个是一个简单的文本文件,其中包含带有参数

的scron脚本的所有实际路径链接

另一个文件是我自己的cron脚本。

我的contab文本文件就是这样:

#!/bin/sh 
/usr/bin/php -f /home/path/reports/report.php arg1

/usr/bin/php -f /home/path/reports/report.php arg2

cron脚本读取crontab文件中的参数,并相应地运行它的参数。

report.php -

php $args = $argv[1];
 $count = 0;
switch($args){
   case 'arg1':
     code and create certain file .... 
   exit;
   case 'arg2':
         code and create certain file  ... 
   exit;

    }   // <--- this script runs perfectly if I run script manually through putty commend line, meaning it will run exactly what I want depending on what $argv[1]  I put in manual commend line,  BUT doesn't run automatically from crontab script

这个文件没有运行,也不知道为什么,当我通过推荐行手动运行report.php时,它运行起来。

我注意到的一件事就是将report.php更改为:

report.php -

$args = $argv[1];
 $count = 0;
switch($args){
   case ($args ='arg1'): // <- just putting the equal sign makes it work
     code and create certain file .... 
   exit;
   case ($args = 'arg2'):
         code and create certain file  ... 
   exit;

    } // <-- this script was a test to see if it had anything to do with the equal sign, surprisingly script actually worked but only for first case no what matter what argv[1] I had, this is not what I am looking for. 

问题是它只适用于第一种情况,无论我在crobtab中的文本文件中放入什么参数,它总是运行第一种情况。这可能是因为我说的是$ args ='arg1',因此它总是将其视为arg1。

所以我尝试通过这样做来实现它:

report.php -

$args = $argv[1];
 $count = 0;
switch($args){
   case ($args =='arg1'): // <- == does not work at all....
     code and create certain file .... 
   exit;
   case ($args == 'arg2'):
         code and create certain file  ... 
   exit;

    } // <--- this script runs perfectly if I run script manually through putty commend line, but not automatically from crontab script

并且它什么都没有运行,它根本没有拿起我的参数,只是为了注意这个带有比较“==”的report.php文件如果我在commend行上手动运行则运行完美。

发生了什么事?当我使用“==”从crontab文件中查找我的参数时,为什么cron脚本没有正确读取我的参数。

3 个答案:

答案 0 :(得分:3)

至于$ argv - &gt; “注意:禁用register_argc_argv时,此变量不可用。”我建议切换到$ _SERVER ['argv']和$ _SERVER ['argc'](是的,你读得正确)而不是$ argv / $ argc stuff。

至于这个

case ($args ='arg1'): // <- just putting the equal sign makes it work
男人,你显然不明白你在做什么以及($ args =='arg1')和($ args ='arg1')之间有什么区别!

- [以下评论的代码] ----

将其保存为test.php:

<?php
echo $_SERVER['argv'][1] ."\n";

并测试它。

$ php test.php abd
abd

答案 1 :(得分:0)

第一个起作用的原因是因为如果你使用=而不是==你在if语句中设置变量。

尝试var_dump($ argv)并查看是否有任何内容分配给变量。

答案 2 :(得分:0)

正如@arxanas在评论中提到的那样,你的开关是AFU。阅读文档herecase语句已经相当于$x == [value],因此您只需使用case [value]:

switch($args) {
    case ($args =='arg1'):
        .
        .
        .
        break;
    .
    .
    .
}

应该是

switch($args) {
    case 'arg1':
        .
        .
        .
        break;
    .
    .
    .
}