2012-02-19 5 views
7

upstart를 사용하여 생성 된 nginx python fastcgi 스크립트에 대한 데몬을 만듭니다. 내가 사용하는 경우 그것은 작동 아래 : 무엇 작동하지 않는 것은우분투 upstart를 사용하여 데몬 중지

sudo start myserver 

:

sudo stop myserver 
stop: Unknown instance: 

아래는 프로세스를 중지하기위한 명령을 내 conf의 파일입니다. 나는 hte process를 죽이라는 명령이 pre-stop 스크립트에 있다고 가정하고 있습니까?

#!upstart 
description "myserver" 
author  "Test" 

start on startup 
stop on shutdown 
respawn 
#instance 

script 
    export HOME="/root" 

    echo $$ > /var/run/myerver.pid 
    exec spawn-fcgi -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 
end script 

pre-start script 
    # Date format same as (new Date()).toISOString() for consistency 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/myserver.sys.log 
end script 

pre-stop script 
    rm /var/run/myserver.pid 
    sudo kill `sudo lsof -t -i:9001` 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/myserver.sys.log 
end script 
+0

는 * 닉스의 질문에 이동 얻을 [superuser.com] (http://superuser.com/) –

답변

8

이 문제를 해결하는 가장 좋은 방법은 spawn-fcgi가 포어 그라운드에서 실행되고 daemonize가 아니라는 것입니다. spawn-fcgi의 man 페이지는 -n 옵션이 이것을 수행한다고 말합니다. 그럼 당신은이 같은이 모든 신출내기 작업을 다시 작성할 수 있습니다 : '콘솔 로그'가 기본값은 모든 출력을 것이다으로 갑자기 출세 한 1.4 당신도, 로그 방향을하지 않아도

start on runlevel [2345] 
stop on runlevel [016] 
respawn  

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 

주/var에/로그/신출내기는/$ UPSTART_JOB.log는 .. 그래서 ITW 단지가 될 울드

start on runlevel [2345] 
stop on runlevel [016] 
respawn 

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 

그것 그래서 당신은 아마 아무도로 실행 더 나을 것이 루트로 실행되지만 포트 9001에서 수신 대기 지적 가치 . 갑자기 출세 1.5 (나중에 다시 우분투 12.04과) 함께 그냥이 추가

setuid nobody 
setgid nogroup 

이 또한주의 (당신은/가정/우분투 사용자의 파일에 있기 때문에 우분투/우분투에 아무도/nogroup을 변경해야 할 수도 있습니다) 파일 시스템이 마운트되기 전과 네트워크가 작동되기 전에 startup 이벤트가 발생하기 때문에 start on startup은 안정적으로 작동하지 않습니다. 또한 start on shutdown은 실제 이벤트가 아니므로 일반 텍스트가 작동하지 않습니다. 자세한 이벤트는 man upstart-events을 참조하십시오.

+0

필자는'start' 행을'start (파일 시스템 및 net-device-up IFACE = lo) 또는 runlevel [2345]로 약간 변경하면 안정적으로 작동한다고 생각합니다. ' –

+1

프로세스가 brough 일 수 없다면 어떨까요? 전경에? 나는 2 개의 명령, phpbrew fpm start 및 phpbrew fpm stop을 가지고있다. 서비스 시작과 서비스 중지를 각각 2 개의 명령으로 변환하기를 원합니다. 어떻게해야합니까? – CMCDragonkai

2

귀하의 사전 정지가 귀하의 서버를 중지하고 있다고 생각합니다. 따라서 Upstart가 귀하의 서버를 중단하려고 시도 할 때 실행중인 프로세스가 멈추고 오류가 발생합니다.

관련 문제