10

我有一个 bash shell 脚本,它调用一些这样的 PHP 脚本。

#!/bin/bash

php -f somescript.php

php -f anotherscript.php

我想根据这些脚本的结果编写错误日志和/或活动报告。

有什么方法可以在 shell 脚本中获取 php 脚本的退出状态?

我可以使用整数退出状态或字符串消息。

4

4 回答 4

14

您可以使用反引号运算符轻松捕获输出,并使用$?获取最后一个命令的退出代码?:

#!/bin/bash
output=`php -f somescript.php`
exitcode=$?

anotheroutput=`php -f anotherscript.php`
anotherexitcode=$?
于 2014-01-14T16:10:15.613 回答
5

埃米利奥的回答很好,但我想我可以为其他人扩展一点。如果你愿意,你可以在 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-cgias 命令(而不是php)可以更轻松地将 url 参数传递给 php 脚本,并且可以使用通常的 php 代码访问这些参数,例如:

$id = $_GET["myUrlParam"];

于 2015-04-22T05:17:42.977 回答
3

该命令的$output参数exec可用于获取另一个 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有关返回状态代码的更多信息,请参阅。

于 2013-09-06T00:16:44.703 回答
0

这比 Emilio 的回答更容易:

只需执行脚本

$ php -f script.php

并回显退出代码

$ echo $?
于 2021-06-01T07:17:17.040 回答