私は2つのファイルを持っています。
1 つは、scron スクリプトのすべての実際のパス リンクと引数を含む単純なテキスト ファイルです。
もう 1 つのファイルは、私の 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 を手動で実行すると実行されます。動作します。
私が気づいたことの1つは、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 ファイルに注意してください。比較 "==" を使用すると、コマンドラインで手動で実行すると完全に実行されます。
何が起こっている?「==」を使用して crontab ファイルから引数を見つけると、cron スクリプトが引数を正しく読み取らないのはなぜですか。