2009-05-14 7 views
0

나는 Debian Etch 서버를 설정하여 nginx로 루비 및 PHP 응용 프로그램을 호스팅합니다. 나는 respawn 동작으로 부팅시 php-cgi 프로세스를 시작하도록 inittab을 성공적으로 구성했습니다. 1000 개의 요청을 처리 한 후, php-cgi 작업자 프로세스는 죽고 init에 의해 다시 만들어집니다. 나는 처음에 (이 길다 간단하기 때문에) 별도의 스크립트의 프로세스 항목 (3 콜론 뒤 모든 것을) 쓴 inittab 프로세스 항목, a.k.a.를 줄이는 방법, init에서 볼 수있는 환경 변수를 넣을 위치는 어디입니까?

50:23:respawn:/usr/local/bin/spawn-fcgi -n -a 127.0.0.1 -p 8000 -C 3 -u someuser -- /usr/bin/php-cgi 

와 inittab에 레코드에 해당 스크립트의 이름을 추가하는 듯했으나 때문에 다음 inittab의 기록은 다음과 같습니다 그 한 줄을 실행하고 죽을 스크립트는 시스템 로그는이 같은 오류로 가득했다 :

May 7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes 

따라서, 내가 스크립트 파일을 제거있어 단지 inittab 파일의 전체 라인을 넣어. 이제부터는 syslog에 오류가 표시되지 않습니다.

이제 레일 응용 프로그램을 제공하기 위해 thin과 동일한 시도를하고 있습니다. 나는 성공적으로이 명령을 실행하여 얇은 서버를 시작할 수 있습니다 : 그것은 분명히 정확히 같은 나는 -d (데몬으로) 플래그를 사용 여부 작동

sudo thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c /path/to/rails/app -p 8010 -u someuser -g somegroup -s 2 -d start 

. 커맨드 라인 컨트롤은 어느 방향 으로든 즉시 돌아온다 (프로세스는 데몬 화되었다). inittab에 전체 명령 (절대 경로 제외)을 넣으면 init은 (syslog에서) 프로세스 항목이 너무 길다는 불만을 토로하므로 옵션을/etc/profile의 내 보낸 환경 변수에 넣습니다. 지금은 성공적으로 서버 시작할 수 있습니다

sudo thin $THIN_OPTIONS start 

을하지만이 부활 작용이있는 inittab의 기록에 넣고 때

51:23:respawn:/usr/local/bin/thin $THIN_OPTIONS start 

로그 명확하게 환경 변수를 초기화하기 위해 보이지 않는 것을 나타냅니다; 그것은 마치 명령이 단순히 "씬 스타트 (thin start)"였던 것과 같습니다.

어떻게 inittab 프로세스 항목을 단축 할 수 있습니까? THIN_OPTIONS 환경 변수를 설정할 수있는/etc/profile이 아닌 다른 파일이 있습니까? php-cgi에 대한 나의 이전 경험은 내가 전체 명령을 별도의 스크립트에 넣을 수는 없다고 말한다.

답변

0

있는 init.d 스크립트

사용

/etc/rc.d/init.d 

에서 스크립트 및 얇은 루비 몇 가지 예입니다 런레벨 여기

를 설정, 아파치

http://articles.slicehost.com/2009/4/17/centos-apache-rails-and-thin

사용하는 예를 초기화 스크립트를 제공

http://elwoodicious.com/2008/07/15/nginx-haproxy-thin-fastcgi-php5-load-balanced-rails-with-php-support/

http://blog.fiveruns.com/2008/9/24/rails-automation-at-slicehost

.

편집 : Asker님께서는 재발생을 허용하지 않을 것이라고 지적했습니다. 나는 init 스크립트에서 fork를 제안하고 init이 멈추지 않도록 프로세스를 거부했다. (스크립트 자체를 포크 (fork) 할 수도있다.) 그리고 서버 프로세스가 죽어서 다시 시작될 때까지 기다리는 무한 루프를 만듭니다.

편집 2 : init이 스크립트를 포크하는 것 같습니다. 루프 만 있으면됩니다.

+0

감사합니다.이 답변으로 처리 할 수없는 한 가지 문제는 가상 서버가 죽을 때 재 작성하는 것입니다. 우리가 이미 할 수있는 지점에서 로그인하고 수동으로 시작해야합니다. 내가 아는 한 inittab 만 자동 재구성을 허용합니다. init.d 스크립트를 respawn하도록 init에게 지시하는 방법을 아는 사람이라면 내 문제도 해결할 수 있습니다. – towynlin

+0

init 스크립트에서 반복적으로 서버를 시작하는 루프로 (죄송합니다) 포크 오프 한 다음 프로세스가 종료되면 루프가 다시 시작되고 서버가 무한하게 종료됩니다. –

+0

며칠 동안 달리면 얇은 과정이 끝나지 않았습니다. 이것은 얇은 작품이 (1) php-cgi 프로세스 자체 또는 (2) spawn-fcgi로 시작된 것 (어떤 것이 확실하지 않은 것)과 다르게 작동한다는 것을 믿게합니다. 본질적으로 특정 수의 요청. 이 지식으로 무장 한 저는 이제는 재 스폰하는 것에 대해 걱정할 필요가 없다고 생각합니다. 비록 제가 희박해질지를 확인해야한다면 에이든의 대답이 그 일을 할 것이지만. 필자는 간단하게 "thin start"또는 "thin stop"중 적절한 인수를 호출하는 매우 간단한 init.d 스크립트를 만들었습니다. – towynlin

1

그리고 옵션을 얇게 시작하는 래퍼를 왜 불러야합니까?

start_thin.sh!
#/빈/bash는
/usr/지방/빈/얇은 -a의 127.0.0.1 -e 생산 -l /var/log/thin/thin.log -P/
51 : 23 : 부활 var에/실행/얇은/thin.pid -c/경로// 레일/응용 프로그램 -p 8010 -u 결과 someuser -g somegroup -s 2

다음을 시작 -d합니다 :/usr/local/bin/start_thin