【发布时间】:2013-09-09 23:13:17
【问题描述】:
我有一个 bash shell 脚本,它可以像这样调用一些 PHP 脚本。
#!/bin/bash
php -f somescript.php
php -f anotherscript.php
我想根据这些脚本的结果编写错误日志和/或活动报告。
有什么方法可以在shell脚本中获取php脚本的退出状态?
我可以使用整数退出状态或字符串消息。
【问题讨论】:
我有一个 bash shell 脚本,它可以像这样调用一些 PHP 脚本。
#!/bin/bash
php -f somescript.php
php -f anotherscript.php
我想根据这些脚本的结果编写错误日志和/或活动报告。
有什么方法可以在shell脚本中获取php脚本的退出状态?
我可以使用整数退出状态或字符串消息。
【问题讨论】:
这比埃米利奥的答案更容易:
执行脚本
$ php -f script.php
并回显退出代码
$ echo $?
【讨论】:
您可以使用 backtick 运算符轻松捕获输出,并使用 $? 获取last command 的退出代码:
#!/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"];
【讨论】:
exec 命令的$output 参数可用于获取另一个 PHP 程序的输出:
被调用者.php
<?php
echo "my return string\n";
echo "another return value\n";
exit(20);
调用者.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。
【讨论】: