2014-11-18 2 views
0

프로세스가 종료되면 간단한 루프를 사용하여 프로세스를 다시 시작합니다. 때때로 루프 멈춤을 보았습니다. 물론 멈춰서는 안됩니다. 이것의 원인은 무엇일까요? 나는 우분투를 실행하는 로우 엔드 노드/vps를 사용하고있다. 14. 고마워. :)루프가 왜 죽을까요?

이것은 내가 사용하는 루프입니다.

#!/bin/bash/ 
period=${1:-60} 
while : 
do 
sleep 20 & 
sh restart.sh 
wait 
done 

는 '는 FFmpeg'의 현재 PID greps와이 발견되지 않는 경우는, 그것이 내가 다음을들을 수 있습니다 내 자신의 인터넷 라디오 방송국을 브로드 캐스팅는 FFmpeg 명령을 다시 실행 .. restart.sh입니다 어디서든 :

#!/bin/bash/ 
pgrep ffmpeg 
if [ $? -ne 0 ] 
then killall ffmpeg 
killall rtmpdump 
sleep 1 
nohup ffmpeg (a bunch of ffmpeg stuff) & 
fi 

이렇게 말하면 ffmpeg가 정지/정지되는 문제가 될 수 있습니다. 제가 여기서 한 일을 향상시킬 수있는 방법이 있습니까? TBH 나는 Linux에 한 달, bash에 일주일 정도 걸린다. 그래서 내가 할 수있는 최선이다.

지금까지 도움을 주셔서 감사합니다. 매우 유용했습니다.

답변

0

restart.sh의 내용에 따라 sh restart.sh이 중단되면 스크립트가 영원히 wait이 될 수 있습니다. waitPID으로 지정하면 은 호출하는 쉘에 알려진 모든 프로세스 ID가 (man 1P wait 참조)이 종료 될 때까지 대기합니다. sh restart.sh이 중단되면 wait은 만족스럽지 않습니다. 배경 잠 특정 요구 사항이없는 경우

, 왜 전경에서 잠을 실행하지하고 모두 wait를 생략 :

#!/bin/bash/ 
period=${1:-60} 
while : 
do 
    sleep 20 
    sh restart.sh 
done 
+0

귀하의 explaination는 많은 이해된다! 감사합니다. 도움이 될 경우 주요 정보에 추가 정보를 추가했습니다. 관계없이이 글을 다시 방문하면 나중에 정확한 앵커로 표시 할 것입니다. 감사!! :) – User8341288564

관련 문제