我有两个档案。
一个是一个简单的文本文件,其中包含带有参数
的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脚本没有正确读取我的参数。
答案 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。阅读文档here。 case
语句已经相当于$x == [value]
,因此您只需使用case [value]:
。
switch($args) {
case ($args =='arg1'):
.
.
.
break;
.
.
.
}
应该是
switch($args) {
case 'arg1':
.
.
.
break;
.
.
.
}