2011-02-08 18 views
8

Tôi nghĩ rằng có rất nhiều bài đăng tương tự nhưng tôi chưa tìm thấy giải pháp nào sau khi tìm kiếm xung quanh.Shell_exec php với nohup

Về cơ bản, tôi đang cố chạy hai tập lệnh trong nền. Khi tôi chạy chúng trong dòng lệnh, tôi thấy sau khi gọi kịch bản đầu tiên của tôi:

/usr/bin/nohup php script.php > nohupoutput.log & echo $! 

Tôi đã thử ...script.php > /dev/null & với kết quả tương tự. Tôi nhận được:

/usr/bin/nohup: ignoring input and redirecting stderr to stdout 

mà tôi bỏ qua và chạy phiên bản thứ hai. Tôi nhận thấy rằng nó dường như được treo ở đó, và nhấn Enter đưa tôi trở lại machine:~folder>

/usr/bin/nohup php script2.php > nohupoutput.log & echo $! 

Cả hai kịch bản làm việc. Tôi đã cố gắng để chuyển đổi này thành một lệnh shell_exec và không có gì để làm việc. Tôi nghi ngờ rằng bit ignoring input gây khó khăn, nhưng tôi không chắc chắn. Bất kể, những điều sau đây không hoạt động. Nó chỉ bị treo trong trình duyệt:

$output = shell_exec('/usr/bin/nohup php script.php > /dev/null &'); 
$output = shell_exec('/usr/bin/nohup php script2.php > /dev/null &'); 

Trả lời

9

Hãy thử:

$output = shell_exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &'); 

Hoặc:

exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &'); 
+0

Tôi nhận được một chuyển hướng đầu ra nhập nhằng khi tôi thử cả trên dòng lệnh. – Rio

+0

bạn đang sử dụng hệ điều hành nào và phiên bản php? đây là một điều kỳ quặc. –

2

này làm việc shoul:

shell_exec('nohup /usr/bin/php path/to/script.php > output.txt &'); 
2
this would help you dude.. 


<?php 

function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
     pclose(popen("start /B ". $cmd, "r")); 
    } 
    else { 
     exec($cmd . " > /dev/null &"); 
    } 
} 
//take note: to get your PHP_PATH, try looking at your phpinfo :) 
echo execInBackground("/usr/local/php53/bin/php 'example2.php'"); 

?> 

này là trang mẫu làm việc của tôi: () ****http://affiliateproductpromotions.net/pop.php*****()

+1

'popen ('nohup ... &', 'r')' là phương thức duy nhất làm việc cho tôi trong OS X cũng như Heroku. Một tấn các giải pháp khác để chạy các quy trình nền tách rời bao gồm. Symfony, Cocur, et al thất bại (hoặc bị chặn thực thi hoặc sẽ chết khi cha mẹ chết). –