У меня есть сценарий оболочки bash, который вызывает несколько PHP-скриптов, подобных этому.
#!/bin/bash php -f somescript.php php -f anotherscript.php
Я хочу составить журнал ошибок и / или отчет о деятельности на основе результатов этих сценариев.
Есть ли способ получить статус выхода php-скрипта в сценарии оболочки?
Я мог бы использовать целочисленные статусы выхода или строковые сообщения.
Вы можете легко поймать вывод с помощью оператора backtick и получить код выхода последней команды с помощью $? :
#!/bin/bash output=`php -f somescript.php` exitcode=$? anotheroutput=`php -f anotherscript.php` anotherexitcode=$?
Ответ Эмилио был хорош, но я думал, что смогу расширить это для других. Вы можете использовать скрипт вроде этого в cron, если хотите, и попросите его отправить вам по электронной почте, если есть ошибка. YAY: D
#!/bin/sh EMAIL="myemail@foo.com" PATH=/sbin:/usr/sbin:/usr/bin:/usr/local/bin:/bin export PATH output=`php-cgi -f /www/Web/myscript.php myUrlParam=1` #echo $output if [ "$output" = "0" ]; then echo "Success :D" fi if [ "$output" = "1" ]; then echo "Failure D:" mailx -s "Script failed" $EMAIL <<!EOF This is an automated message. The script failed. Output was: $output !EOF fi
Использование php-cgi
в качестве команды (вместо php
) упрощает передачу параметров url в php-скрипт, и к ним можно получить доступ, используя обычный PHP-код, например:
$id = $_GET["myUrlParam"];
Параметр $output
команды exec
может использоваться для получения вывода другой PHP-программы:
callee.php
<?php echo "my return string\n"; echo "another return value\n"; exit(20);
caller.php
<?php exec("php callee.php", $output, $return_var); print_r(array($output, $return_var));
Запустив caller.php, вы получите следующее:
Array ( [0] => Array ( [0] => my return string [1] => another return value ) [1] => 20 )
Обратите внимание, что статус exit
должен быть числом в диапазоне 0-254. См. exit
для получения дополнительной информации о кодах состояния возврата.