2014-04-07 12 views
3

우분투 (13.10) 서버에 일련 번호 node.js 개의 스크립트를 설치하고 가능한 한 많이 실행하고 서버 재부팅시 자동으로 다시 시작합니다. 우리는 몇 가지 다른 기술을 시도했지만 아직 작동하는 해결책을 찾지 못했습니다.영원히 함께 Upstart 실행

는 설정 : 포트 80에서 실행되는 스크립트 없음, 대신 우리는

Node.js 파일이 현재 우리는 그것들을 설정 한 /usr/lib/sites/path/Node

에서 실행 및 실행 개별적으로 영원히 동안 사용하는 8000 이상의 포트를 실행하지

forever start server_process.js 

우리는 이것들을 실행하려면 : 간단하게 스크립트가 포함 된 폴더의 맥락에서 다음을 실행하여, 잘 특권 (그러나 루트) 사용자의 컨텍스트에서 실행 서버를 시작할 때 스크립트를 사용하고 필요할 때 나중에 다시 시작할 수있는 기능이 있습니다.

Upstart는 해결책 인 것처럼 들리지만 아직 작동시키지 못했습니다. 다음 스크립트는

무딘 시행 착오를 통해
description "Our app" 
version "1.0" 
author "Nautilytics" 

start on startup 
stop on shutdown 

expect fork 

env FOREVER_PATH=/usr/bin/forever 
env APPLICATION_DIRECTORY=/usr/lib/sites/path/Node 
env APPLICATION_START=ourapp.js 
env LOG_PATH=/var/log/ourapp.log 

chdir /usr/lib/sites/path/Node 

script 
    exec $FOREVER_PATH start --sourceDir $APPLICATION_DIRECTORY -f -v $APPLICATION_START >> $LOG_PATH 2&>1 
end script 

은, 몇 번 우리가하지 않을 수있는 다른 파일 (ourapp.js에 의해 요구되는) 것을 나타냅니다 오류를 얻을 수 있었다 ... 다음, 시작의 원인을 알려주는없이 중지 마치 chdir이 효과가 없거나 영원히 시작된 것처럼 보입니다.

+0

왜 영원히 필요합니까? Upstart가 요구 사항을 처리 할 수 ​​있습니다. 반면에 Upstart는 [systemd] (https://wiki.ubuntu.com/systemd)의 [replaced] (http://www.markshuttleworth.com/archives/1316) 따라서 Upstart는 가기. –

+1

우리는 영원히 조금 중복되었고 upstart에서 respawn이이 작업을 처리 할 수 ​​있다고 결정했습니다. – hotshotiguana

답변

4

해결책을 찾기 위해 인터넷을 샅샅이 뒤쫓고 나서 우리는 nodejs를 붙잡고이 작업에 영원히 사용하지 않기로 결정했습니다. 그것은 훨씬 쉬웠고 부활 할 때 우리를 위해 우리가 영원히 필요로하는 모든 것을 수행합니다.

start on runlevel [2345] 

stop on shutdown 

respawn 

script 
    exec sudo nodejs /usr/lib/sites/path/Node/ourapp.js 2>&1 >> /var/log/ourapp.log 
end script 
+3

root로 nodejs를 실행하는 것이 안전하지 않은 것으로 간주됩니다. nodejs를 www-data 또는 nobody와 같이 권한이없는 사용자로 실행하는 것이 더 좋습니다. –

+1

+1, 나는 아래처럼 절대 경로를 제공함으로써 영원히 그것을했다 : exec/usr/bin/forever /usr/lib/sites/path/Node/ourapp.js 2> & 1 >>/var/log/ourapp. 로그' –

0

process.cwd()를 확인 했습니까? 프로세스가 다른 곳에서 실행 중일 수 있습니다.

1

더 안전한 신출내기 설정 스크립트 (경화-nodejs.conf) 수 있습니다 비트 :

낮은 포트에서 수신 nodejs 응용 프로그램을 실행하는 솔루션의
description "Managing and monitoring nodejs application" 

# start when filesystem is mounted networking is up 
start on (filesystem and net-device-up IFACE!=lo) 
# stop on shutting down the system 
stop on runlevel [016] 

# application environment 
# staging and development instances should use hardened-nodejs.override to define environment 
env NODE_ENV=production 

# respawn the job up to 10 times within a 5 second period. 
# If the job exceeds these values, it will be stopped and marked as failed. 
respawn 
respawn limit 10 5 

# ssl-cert group can read certificates 
setuid www-data 
setgid ssl-cert 

exec /usr/bin/nodejs /usr/lib/sites/path/Node/ourapp.js 2>&1 >> /var/log/ourapp.log 

하나가 될 수는 capabilities tools를 사용합니다.

SSL을 통한 서비 스 사용자 또는 그룹에 인증서에 대한 읽기 권한이 있어야합니다. 기본 개념은 ssl-cert packagethis answer을 확인하십시오.