
스크립트가 작동합니다!
먼저 CLI에 다음을 입력합니다. php worker.php >>/home/xxx/log 2>&1
그런 다음 자체 프로세스로 실행되도록 하여 &
끝에 다음과 같이 추가합니다.php worker.php >>/home/xxx/log 2>&1 &
그러나 이제는 아무 것도 추가되지 않고 스크립트가 여전히 남아 있기 /home/xxx/log
때문에 스크립트가 실행되지 않습니다.ps -fux
내가 이해하지 못하는 한 가지는 마지막 명령을 실행할 때 다음과 같은 결과가 나온다는 것입니다.
xxx@xxx:/path$ php worker.php >>/home/xxx/log 2>&1 &
[1] 10659
나중에 쉘에서 로그아웃하려고 하면 다음과 같은 메시지가 나타납니다.
xxx@xxx:/path$ logout
There are stopped jobs.
[1]+ Stopped php worker.php >> /home/xxx/log 2>&1
여기서 무슨 일이 일어나고 있는 걸까요? 내가 원하는 것은 백그라운드에서 스크립트를 실행하고 모든 출력을 파일에 추가하는 것입니다.
감사해요!
편집하다:
여기에 예가 있습니다.
user@box:~/nohuptest$ vim worker.php
user@box:~/nohuptest$ touch log
user@box:~/nohuptest$ php worker.php >> log 2>&1 &
[1] 31523
user@box:~/nohuptest$ cat log
[1]+ Stopped php worker.php >> log 2>&1
user@box:~/nohuptest$ php worker.php >> log 2>&1 &
[2] 31626
user@box:~/nohuptest$ cat log
[2]+ Stopped php worker.php >> log 2>&1
user@box:~/nohuptest$
user@box:~/nohuptest$ cat worker.php
<?php
echo "hello world\n";
?>
user@box:~/nohuptest$
답변1
어딘가에 오타나 뭔가가 있는 것 같아요. 설명하는 내용은 완벽하게 작동해야 합니다.
$ cat worker.php
<?
echo "hello world\n"
?>
$ php worker.php >> log 2>&1 &
[1] 16353
$ cat log
hello world
$ php worker.php >> log 2>&1 &
$ cat log
hello world
hello world
이 예제를 시도해 보고 작동하는지 알려주실 수 있나요?
는 백그라운드에서 작업을 시작했음을 알려줍니다 [1] 16353
.bash
프로세스 ID16353.
답변2
내 생각 엔 귀하의 프로그램이 tty를 여는 것 같습니다. 그렇게 하는 것은 당신이 아니라 PHP 자체일 수도 있습니다.
노력하다:
php worker.php </dev/null >>/home/xxx/log 2>&1 &
그래도 작동하지 않으면 언제든지 tmux/screen에서 실행할 수 있습니다.
tmux [enter]
php worker.php </dev/null >>/home/xxx/log 2>&1
[CTRL-b][d]
스크립트를 사용하여 실행할 수도 있습니다.
echo "php worker.php >>/home/xxx/log 2>&1" | script &
답변3
해결책을 찾았습니다.
php script.php [args] </dev/null >>/path/to/log 2>&1 &
PHP가 입력을 기다리고 있었습니다... php.ini 파일에서 이 문제를 해결할 수 있을지는 모르겠지만 지금은 작동합니다...