2012-09-09 3 views
0

C로 작성된 CGI 스크립트 내부에서 Boa 웹 서버를 다시 시작하려고합니다. 이것은 ucLinux 시스템에 있습니다. 시스템 ("/ etc/init.d/boa.sh restart")에 대한 호출이 성공적으로 실행되고 보아가 중지되었다는 것을 로그에서 볼 수 있지만 시작되지는 않습니다. CLI에서 boa.sh를 다시 시작하면 정상적으로 작동합니다. boa.sh 스크립트는 다음과 같습니다. 왜 완전히 다시 시작하지 않는지에 대한 아이디어가 있습니까? 보아 내에서 CGI 스크립트 자체가 실행되고 있음을 유의하십시오.CGI에서 스크립트를 다시 시작하여 완전히 다시 시작하지 못했습니다.

 

NAME=boa 
PROG=/bin/boa 
OPTIONS="-c /etc/" 
LOCKFILE=/var/lock/boa 
STDLOGFILE=/var/log/boaerrlog.log 

case "$1" in 
    start) 
     echo -n $"Starting $NAME: " 
     boa $OPTIONS > /dev/null 2>&1 & 
#  boa $OPTIONS >$STDOUTFILE 2>&1 & 
     touch $LOCKFILE 
     echo "OK" 
     ;; 
    stop) 
     echo -n $"Stopping $NAME: " 
     kill -TERM `pidof $NAME` > /dev/null 2>&1 
     rm -f $LOCKFILE $PIDFILE > /dev/null 2>&1 
     echo "OK" 
     ;; 
    restart) 
     $0 stop 
     $0 start 
     ;; 
    status) 
     echo "running" 
     ;; 
esac 
 
+0

CGI 스크립트를 실행하는 사용자에게 스크립트를 시작해야하는 모든 파일/디렉토리에 대한 권한이 있습니까? 필요한 모든 권한을 얻으려면 CGI 스크립트를 통해 sudo 명령을 사용해야 할 수도 있습니다. – Lipongo

+0

예 권한은 괜찮을 것입니다. 루트 권한을 가진 유일한 임베디드 시스템입니다. 제안 해 주셔서 감사합니다. –

+0

정지가 실제로 성공적으로 완료되었음을 나타내는 로깅이 있습니까? 또는 시작을 제안하는 로깅이 실제로 시작됩니까? – Lipongo

답변

1

채팅으로 수집 된 정보

CGI에서 시스템 호출을 통해 다시 시작되는 프로세스는 실제로 동일한 프로세스에서 처리됩니다. 이것은 시그널이라는 용어가 재시작 된 보아 프로세스를 포함하여 트리의 모든 프로세스를 죽일 가능성이 있기 때문에 작동하지 않습니다.

대안으로 프로덕션 인스턴스를 다시 시작할 수있는 두 번째 보아 인스턴스를 실행하는 것입니다. 프로덕션 인스턴스가 프로덕션 인스턴스를 다시 시작하는 데 사용 된 두 번째 인스턴스를 다시 시작할 수 있습니다.

+0

또 다른 옵션은 일괄 처리 기능을 사용하는 것입니다. 'echo "와 같은 것 /etc/init.d/boa.sh restart"| 지금. 이것은 서버를 재시작하기 위해 (거의 즉각적으로) 작업을 대기열에 넣지 만'stop '단계에서 kill되는'boa'의 자식이 아니라'atd' 데몬의 자식이 될 것입니다. – twalberg

+0

토론 중에 우리는 linux (임베디드 유형)의 배포판이 at 또는 cron을 지원하지 않는다는 것을 발견했습니다. 채팅 중에 다른 옵션을 제시했기 때문입니다. – Lipongo

+0

도움 주셔서 감사합니다. 아주 좋은 정보입니다. 나는 이번 주에 해결책을 생각해 보려고 노력할 것인데, 만약 내가 트윈 보아 루트로 가고 싶지 않다면. –

관련 문제