1

我有两个文件。

一个是一个简单的文本文件,其中包含我的 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 文件中的参数,并根据它的参数运行。

报告.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更改为:

报告.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。

所以我试图通过这样做来使其工作:

报告.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文件如果我在推荐行上手动运行就可以完美运行。

到底是怎么回事?当我使用“==”从 crontab 文件中查找我的参数时,为什么 cron 脚本不能正确读取我的参数。

4

3 回答 3

3

至于 $argv -> “注意:当 register_argc_argv 被禁用时,此变量不可用。”。我建议切换到 $_SERVER['argv'] 和 $_SERVER['argc'] (是的,你没看错)而不是 $argv/$argc 的东西。

至于这个

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
于 2012-08-20T20:50:56.500 回答
0

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

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

于 2012-08-20T20:52:38.207 回答
0

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

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

应该

switch($args) {
    case 'arg1':
        .
        .
        .
        break;
    .
    .
    .
}
于 2012-08-20T20:54:44.917 回答