결과를 기다리지 않는 php exec 명령 (또는 유사)
실행하고 싶은 명령이 있지만 PHP가 결과를 기다리지 않기를 바랍니다.
<?php
echo "Starting Script";
exec('run_baby_run');
echo "Thanks, Script is running in background";
?>
PHP가 결과를 기다리지 않도록 할 수 있습니까? 즉, 시작하고 다음 명령으로 넘어갑니다.
나는 아무것도 찾을 수 없으며 그 가능성도 확실하지 않습니다. 내가 찾을 수있는 최선은 누군가 CRON 작업을 시작하여 1 분 안에 시작하는 것입니다.
로부터 문서 :
명령을 실행하는 동안 PHP 스크립트가 중단되지 않도록하려면 실행하는 프로그램이 php로 다시 출력되지 않아야합니다. 이렇게하려면 stdout과 stderr를 모두 / dev / null로 리디렉션 한 다음 배경을 지정합니다.
>
/dev/null 2>&1 &
명령을 실행하고 계속 실행하기 위해 아파치 스레드에 의존하지 않는 다른 프로세스로 생성되도록하려면 (누군가 페이지를 취소해도 죽지 않음) 다음을 실행합니다.
exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');
명령 &
끝에 다음과 같이 추가하여 백그라운드에서 명령을 실행할 수 있습니다 .
exec('run_baby_run &');
그러나 이렇게하면 다음과 같은 이유로 스크립트가 중단됩니다.
프로그램이 exec 함수로 시작되는 경우 백그라운드에서 계속 실행하려면 프로그램의 출력을 파일 또는 다른 출력 스트림으로 리디렉션해야합니다. 그렇게하지 않으면 프로그램 실행이 끝날 때까지 PHP가 중단됩니다.
따라서 명령의 stdout을 파일로 리디렉션 할 수 있습니다 (나중에보고 싶거나 /dev/null
다음과 같이 삭제하려는 경우).
exec('run_baby_run > /dev/null &');
이것은 wget을 사용하여 기다리지 않고 무언가의 URL을 알립니다.
$command = 'wget -qO- http://test.com/data=data';
exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid);
이것은 ls를 사용하여 기다리지 않고 로그를 업데이트합니다.
$command = 'ls -la > content.log';
exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid);
"exec nohup setsid your_command"
nohup을은 도 처음 해지 할 수 있습니다 시작하는 과정 불구하고 계속 your_command 수 있습니다. 그렇다면 SIGNUP 신호가 your_command로 전송되어 종료되도록합니다 (해당 신호를 포착하여 무시하지 않는 한).
이를 구현하는 두 가지 가능한 방법이 있습니다. 가장 쉬운 방법은 dev / null에 대한 직접적인 결과입니다.
exec("run_baby_run > /dev/null 2>&1 &");
그러나 수행 할 다른 작업 이있는 경우 ignore_user_abort를 고려할 수 있습니다 .이 경우 연결을 닫은 후에도 스크립트가 실행됩니다.
참고 URL : https://stackoverflow.com/questions/3819398/php-exec-command-or-similar-to-not-wait-for-result
'developer tip' 카테고리의 다른 글
고유하지 않은 열의 날짜별로 Pandas DataFrame 항목을 그룹화하는 방법 (0) | 2020.11.10 |
---|---|
NSNotificationCenter 대 위임 (프로토콜 사용)? (0) | 2020.11.10 |
MongoDB 셸에서 복제 세트에 어떻게 연결합니까? (0) | 2020.11.10 |
setState는 상태를 즉시 업데이트하지 않습니다. (0) | 2020.11.10 |
jquery에서 배열을 어떻게 생성합니까? (0) | 2020.11.10 |