2013-09-06 10 views
7

Mam skrypt powłoki bash, który wywołuje kilka takich skryptów PHP.Odzyskaj status wyjścia ze skryptu php wewnątrz skryptu powłoki

#!/bin/bash 

php -f somescript.php 

php -f anotherscript.php 

Chcę skomponować dziennik błędów i/lub raport aktywności na podstawie wyników tych skryptów.

Czy jest jakiś sposób uzyskania statusu wyjścia skryptu php w skrypcie powłoki?

Mogłem użyć stanów wyjść całkowitych lub komunikatów tekstowych.

Odpowiedz

9

Można łatwo złapać wyjście używając grawis operatora i uzyskać kod wyjścia z ostatniego polecenia za pomocą $?:

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

anotheroutput=`php -f anotherscript.php` 
anotherexitcode=$? 
1

Parametrem komendy exec$output mogą być wykorzystywane w celu uzyskania wyjścia innego programu 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)); 

Running rozmówcę. php wyświetli:

Array 
(
    [0] => Array 
     (
      [0] => my return string 
      [1] => another return value 
     ) 

    [1] => 20 
) 

Uwaga: status exit musi być liczbą z zakresu 0-254. Aby uzyskać więcej informacji na temat kodów statusu powrotu, patrz exit.

+0

ahh dzięki ale czy jest jakiś sposób, aby uzyskać wyjście kiedy skrypty php nazywane są ze skryptu bash? Właśnie o to chciałem zapytać. Przypuszczam, że mógłbym przepisać skrypt basha w PHP, aby użyć opisanej funkcji, co jest przydatne. –

2

odpowiedź Emilia była dobra, ale myślałem, że mogę przedłużyć trochę dla innych. Można użyć skryptu jak ten w cron, jeśli chcesz, i to napisz, czy wystąpił błąd .. YAY: D

#!/bin/sh 

EMAIL="[email protected]" 
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 

Korzystanie php-cgi jako polecenie (zamiast php) sprawia, że ​​łatwiej zdać URL parametry do skryptu PHP, a te można uzyskać za pomocą zwykłego kodu php np

$id = $_GET["myUrlParam"];

Powiązane problemy