2013-09-06 42 views
7

Tôi có tập lệnh bash shell gọi một số tập lệnh PHP như thế này.Truy xuất trạng thái thoát từ tập lệnh php bên trong tập lệnh shell

#!/bin/bash 

php -f somescript.php 

php -f anotherscript.php 

Tôi muốn soạn nhật ký lỗi và/hoặc báo cáo hoạt động dựa trên kết quả của các tập lệnh đó.

Có cách nào để tôi có thể lấy trạng thái thoát của tập lệnh php trong tập lệnh shell không?

Tôi có thể sử dụng trạng thái thoát số nguyên hoặc thông báo chuỗi.

Trả lời

9

Bạn có thể dễ dàng bắt đầu ra bằng cách sử dụng backtick hành , và lấy mã lối ra của lệnh cuối cùng bằng cách sử dụng $?:

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

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

Các $output tham số của lệnh exec thể được sử dụng để có được đầu ra của một chương trình 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)); 

Chạy gọi. php sẽ xuất ra:

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

    [1] => 20 
) 

Lưu ý trạng thái exit phải là số trong khoảng 0-254. Xem exit để biết thêm thông tin về mã trạng thái trả lại.

+0

ahh nhờ nhưng là có cách nào để nhận được đầu ra khi kịch bản php được gọi từ một kịch bản bash? Đó là điều tôi muốn hỏi. Tôi cho rằng tôi có thể viết lại kịch bản lệnh bash trong PHP để sử dụng chức năng bạn đã mô tả, điều này rất hữu ích. –

2

Câu trả lời của Emilio rất tốt nhưng tôi nghĩ tôi có thể mở rộng một chút cho người khác. Bạn có thể sử dụng một kịch bản như thế này trong cron nếu bạn thích, và có nó gửi email cho bạn nếu có một lỗi .. 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 

Sử dụng php-cgi như lệnh (thay vì php) làm cho nó dễ dàng hơn để vượt qua thông số url để kịch bản php, và chúng có thể được truy cập bằng cách sử dụng mã php thông thường ví dụ:

$id = $_GET["myUrlParam"];

Các vấn đề liên quan