nohup을 사용하여 스크립트를 무기한 실행하도록 설정

nohup을 사용하여 스크립트를 무기한 실행하도록 설정

나는 그것에 익숙하지 않고 내 웹 서버 Linux에만 사용합니다 . 제가 겪은 문제는 이렇습니다.SSHPutty

기본적으로 스크립트가 2개 있습니다 php. 한 사람은 get_tweets.php지속적으로 트위터의 트윗을 듣고, Streaming API다른 사람은 parse_tweets.php해당 트윗을 기록합니다 db. 유용하게 사용하려면 지속적으로 실행되어야 합니다.

나는 다음 명령을 사용하여 백그라운드에서 실행해 왔으며 내가 볼 수 있는 바에 따르면 하루 종일 실행되지만 아침에 컴퓨터에 로그인할 때마다 scripts중지되고 명령을 다시 실행해야 합니다.

nohup php my_script.php > /dev/null &

nohup내가 사용하고 있는 명령에 따라 이것이 정상적인 것인지, 사용할 때 무기한으로 실행해야 하는지 , 그렇지 않은 경우 대안은 무엇인지 궁금합니다 . 직업 CRON?

당신의 도움에 감사드립니다

답변1

또한 nohup오류를 리디렉션해야 합니다. 다음 명령은 스크립트를 실행하고 출력 및 오류를 /dev/null로 리디렉션합니다.

nohup php my_script.php >/dev/null 2>&1 &

그러나 다른 이유로 인해(스크립트 오류, oom-killer 등) 스크립트가 종료될 수 있습니다. 따라서 시스템의 init를 통해 이를 데몬화해야 합니다(자동 재시작을 지원하는 경우 upstart, systemd 및 기타 몇 가지 기능이 이를 수행할 수 있음). 또는 스크립트가 실행되고 있지 않은 경우 크론 작업을 작성하여 스크립트를 확인하고 다시 시작해야 합니다.

답변2

어쩌면 출력을 /dev/null.

오픈 screen이나 tmux세션을 제안합니다. 둘 다터미널 멀티플렉서, 로그아웃하더라도 활성 상태로 유지됩니다.

예를 들어 (..)정보를 얻으세요 .

$ screen
$(inside screen-t1): ./get_tweets.php
.... running first

이제 Ctrl-a c새 터미널을 열려면 키를 누르세요.

 $(inside screen-t2): ./parse_tweets.php
 ... running second

Ctrl-a d세션을 분리할 수 있습니다. 다시 로그인할 때 다음을 사용하세요.screen -r

참고: 화면에 상태 표시줄을 표시하여 다양한 창을 시각화할 수 있습니다.

답변3

스크립트가 종료될 때 다시 시작되는지 확인하려면 다음과 같이 할 수 있습니다.while true ; do php my_script.php ; done > /dev/null

my_script.php가 다시 실행되기 전에 실행이 완료될 때까지 기다립니다. 모든 출력은 /dev/null로 전송됩니다.

nohup을 사용하려면 다음을 수행해야 합니다.

$ echo 'while true ; do php my_script.php ; done > /dev/null' > ~/php_run_loop.sh
$ chmod a+x ~/php_run_loop.sh
$ nohup ~/php_run_loop.sh

참고: PHP 스크립트에 버그나 다른 문제가 있으면 제한 없이 계속해서 실행될 수 있습니다. 우아한 해결책은 아니지만 해결책입니다.

그런데 cron은 일정에 따라(5분마다 또는 매주 등) 단기 프로세스를 실행하는 데 적합하지만 기존 프로세스를 계속 실행하는 방법을 모릅니다.

관련 정보