我有一个Bash shell脚本,像这样调用几个PHP脚本。
#!/bin/bash
php -f somescript.php
php -f anotherscript.php
我希望基于这些脚本的结果撰写一个错误日志和/或活动报告。
有没有办法在shell脚本中获取php脚本的退出状态?
我可以使用整数退出状态或字符串消息。
您可以使用反引号操作符轻松捕获输出,并通过使用$?获取上一个命令的退出代码:
#!/bin/bash
output=`php -f somescript.php`
exitcode=$?
anotheroutput=`php -f anotherscript.php`
anotherexitcode=$?
Emilio的回答很好,但我认为我可以为其他人扩展一下。如果你喜欢,你可以在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));
Array
(
[0] => Array
(
[0] => my return string
[1] => another return value
)
[1] => 20
)
exit
状态必须是0-254范围内的数字。更多关于返回状态码的信息,请参见exit
。这比Emilio提供的答案更容易:
只需执行脚本即可
$ php -f script.php
并输出退出代码
$ echo $?