Hướng dẫn php execute shell command in background - php thực thi lệnh shell trong nền

7

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi cần thực hiện một tập lệnh shell. Tôi muốn làm điều này

$Command = "nohup cvlc input --sout '#transcode {vcodec=h264,acodec=mp3,samplerate=44100}:std{access=http,mux=ffmpeg{mux=flv},dst=0.0.0.0:8083/".output"}' &";
$str = shell_exec($Command);

Tôi không muốn nó đợi cho đến khi lệnh kết thúc, tôi muốn nó chạy trong một quy trình nền. Tôi không muốn một chủ đề PHP khác vì nó sẽ hết thời gian chờ lệnh có thể mất đến 3 giờ để hoàn thành.

Hướng dẫn php execute shell command in background - php thực thi lệnh shell trong nền

hỏi ngày 5 tháng 10 năm 2011 lúc 7:11Oct 5, 2011 at 7:11

1

$str = shell_exec($Command.' 2>&1 > out.log');

Bạn cần chuyển hướng đầu ra của lệnh.

Nếu một chương trình được bắt đầu với chức năng này, để nó tiếp tục chạy ở chế độ nền, đầu ra của chương trình phải được chuyển hướng đến một tệp hoặc luồng đầu ra khác. Không làm như vậy sẽ khiến PHP bị treo cho đến khi việc thực hiện chương trình kết thúc.

http://php.net/manual/en/function.exec.php

Đã trả lời ngày 5 tháng 10 năm 2011 lúc 7:50Oct 5, 2011 at 7:50

Matthieu Napolimatthieu NapoliMatthieu Napoli

46.5K44 Huy hiệu vàng163 Huy hiệu bạc254 Huy hiệu Đồng44 gold badges163 silver badges254 bronze badges

Bạn có thể thử chạy lệnh của mình trong nền bằng cách sử dụng một chức năng như thế này:

function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}

Điều này làm cho lệnh shell của bạn chạy, nhưng luồng PHP vẫn tiếp tục.

Benmorel

32,8K48 Huy hiệu vàng170 Huy hiệu bạc303 Huy hiệu đồng48 gold badges170 silver badges303 bronze badges

Đã trả lời ngày 24 tháng 5 năm 2012 lúc 11:09May 24, 2012 at 11:09

Eduardo Russoeduardo RussoEduardo Russo

3.9332 Huy hiệu vàng20 Huy hiệu bạc36 Huy hiệu Đồng2 gold badges20 silver badges36 bronze badges

0

Tôi có thể chạy tập lệnh shell trong nền không? background process and why do we need them?

Chạy lệnh shell hoặc tập lệnh trong nền bằng lệnh Nohup. Một cách khác, bạn có thể chạy một lệnh trong nền là sử dụng lệnh Nohup. Lệnh Nohup, viết tắt không bị treo lên, là một lệnh giữ cho một quá trình chạy ngay cả sau khi thoát khỏi vỏ.

PHP có thể chạy trong nền không?

Trong PHP, chúng tôi không thể trực tiếp chạy bất kỳ công việc quy trình nào trong nền ngay cả khi công việc cha mẹ chấm dứt.

php filename.php

Làm cách nào để chạy tập lệnh shell trong PHP?exec and shell_exec functions in PHP.

Một lệnh mẫu để chạy bất kỳ lệnh nào với PHP là:

PHP

Các

$str = shell_exec($Command.' 2>&1 > out.log');
3

Có những điểm quan trọng của mã trên:

  • Đầu ra (stdout) của tập lệnh phải được chuyển đến một tệp. /dev/null chỉ ra rằng chúng tôi không ghi nhật ký đầu ra.
  • Các lỗi (STDERR) cũng phải được chuyển đến một tệp. 2> & 1 có nghĩa là stderr được chuyển hướng vào stdout và do đó vào niết bàn.
  • Chung kết & bảo lệnh thực thi trong nền. execute in the background.

& nbsp; chúng ta có thể kiểm tra trạng thái của bất kỳ quy trình đang chạy nào với lệnh PS, ví dụ:

ps -ef

Vì vậy, để chạy bất kỳ quy trình nền nào từ PHP, chúng tôi chỉ có thể sử dụng chức năng EXEC hoặc shell_EXEC để thực thi bất kỳ lệnh đầu cuối nào và trong lệnh đó, chúng tôi chỉ cần thêm và vào cuối cùng để quá trình có thể chạy ở chế độ nền.

Dưới đây là việc thực hiện phương pháp trên:

PHP

$str = shell_exec($Command.' 2>&1 > out.log');
4

Các

Có những điểm quan trọng của mã trên:

function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
6
function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
7
function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
8

function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
6
$str = shell_exec($Command.' 2>&1 > out.log');
7
function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
8

function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
6
$str = shell_exec($Command.' 2>&1 > out.log');
9

function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
3
$str = shell_exec($Command.' 2>&1 > out.log');
2

php filename.php
6
php filename.php
7
php filename.php
8

function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
6
ps -ef
0
function exec_bg($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
4
ps -ef
2

ps -ef
3

$str = shell_exec($Command.' 2>&1 > out.log');
6
ps -ef
5
ps -ef
2

php filename.php
7
ps -ef
8
ps -ef
9
processID of process in background is: 19926
current processID is: 19924
0
processID of process in background is: 19926
current processID is: 19924
1

$str = shell_exec($Command.' 2>&1 > out.log');
3

Đầu ra

processID of process in background is: 19926
current processID is: 19924


Tôi có thể chạy tập lệnh shell trong nền không?

Chạy lệnh shell hoặc tập lệnh trong nền bằng lệnh Nohup. Một cách khác, bạn có thể chạy một lệnh trong nền là sử dụng lệnh Nohup. Lệnh Nohup, viết tắt không bị treo lên, là một lệnh giữ cho một quá trình chạy ngay cả sau khi thoát khỏi vỏ.using the nohup command. The nohup command, short for no hang up, is a command that keeps a process running even after exiting the shell.

PHP có thể chạy trong nền không?

Trong PHP, chúng tôi không thể trực tiếp chạy bất kỳ công việc quy trình nào trong nền ngay cả khi công việc cha mẹ chấm dứt.we can not directly run any process job in the background even if the parent job terminates.

Làm cách nào để chạy tập lệnh shell trong PHP?

Hàm shell_exec () là một hàm sẵn có trong PHP được sử dụng để thực thi các lệnh thông qua shell và trả về đầu ra hoàn chỉnh dưới dạng chuỗi.Shell_exec là bí danh cho toán tử backtick, cho những người được sử dụng để *nix.Nếu lệnh không trả về null và các giá trị không đáng tin cậy để kiểm tra lỗi.shell_exec() function is an inbuilt function in PHP which is used to execute the commands via shell and return the complete output as a string. The shell_exec is an alias for the backtick operator, for those used to *nix. If the command fails return NULL and the values are not reliable for error checking.

Làm cách nào để chạy một quá trình trong nền?

Sử dụng BG để gửi các lệnh chạy đến nền, bạn có thể dễ dàng gửi các lệnh đó đến nền bằng cách nhấn các phím Ctrl + Z và sau đó sử dụng lệnh BG.Nhấn Ctrl + Z dừng quá trình chạy và BG đưa nó lên nền. You can easily send such commands to the background by hitting the Ctrl + Z keys and then using the bg command. Hitting Ctrl + Z stops the running process, and bg takes it to the background.