파일에 오류를 추가하고 nohup을 사용하는 스크립트 실행

파일에 오류를 추가하고 nohup을 사용하는 스크립트 실행

스크립트가 작동합니다!

먼저 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 파일에서 이 문제를 해결할 수 있을지는 모르겠지만 지금은 작동합니다...

관련 정보