FreeBSD의 여러 Zope 인스턴스에 대한 rc 스크립트

FreeBSD의 여러 Zope 인스턴스에 대한 rc 스크립트

FreeBSD에서 여러 Zope 인스턴스를 데몬으로 구성하려고 합니다. 각 인스턴스에는 시작 스크립트가 있습니다./usr/local/etc/rc.d. 시작은 잘 작동하지만 실행 중인 인스턴스의 PID가 혼동되기 때문에 상태를 호출하거나 중지하는 데 문제가 있습니다(PID가 다르지만 시작 스크립트가 이를 구분할 수 없음).

다음은 rc 스크립트의 템플릿입니다.

instancename="%%instancename%%"
name="$instancename"

rcvar="${name}_enable"

zope="/usr/local/opt/zope"
python="${zope}/bin/python"
command_interpreter="$python"
command="${zope}/bin/runwsgi -v /usr/local/www/zope-instances/${instancename}/etc/zope.ini -d"

start_cmd="/usr/sbin/daemon -u myuser $command"

load_rc_config "$name"
run_rc_command $*

"%%" 사이의 값은 인스턴스마다 다르게 설정됩니다.

상태를 가져오거나 프로세스를 중지하려고 할 때( service instancename status또는 service instancename stop) 마지막으로 시작된 인스턴스의 PID가 사용됩니다. 이는 pid 파일을 생성할 수 있는 프로세스의 경우에는 해당되지 않지만 필요한 스크립트인 runwsgi는 pid 파일을 생성하지 않습니다.

나는 이해프로세스 이름,기본값은주문하다프로세스를 구별하기 위해 변수를 사용했지만 필요에 맞게 올바르게 설정하는 방법을 모르겠습니다.

답변1

나는 당신이 올바른 길을 가고 있다고 생각하지만 rc 프레임워크가 실제로 처리하는 것보다 더 많은 일을 자동으로 처리할 것으로 기대하고 있습니다.

아마 낯익은 것 같은데BSD의 실용적인 rc.d 스크립트다음에 대해 이야기할 때:

예를 들어 stop은 프로세스를 종료하기 위해 프로세스의 PID를 알아야 합니다. 이 예에서 rc.subr(8)은 모든 프로세스 목록을 스캔하여 $procname과 동일한 이름을 가진 프로세스를 찾습니다. 후자는 rc.subr(8)의 또 다른 의미 있는 변수로, 기본값은 command 값입니다. 즉, command를 설정할 때 procname은 실제로 동일한 값으로 설정됩니다.

"간단한" 데몬이 없다는 것을 인정하고 다음 부분을 확인한다면 여러분의 삶은 훨씬 쉬워질 것입니다."고급" 데몬. 따라서 PID를 스캔할 수 있도록 올바른 이름을 설정하는 것보다 procname간단히 PID 파일을 설정하는 것이 좋습니다. pidfile알려진 엔터티입니다rc.subr(8)이해했다.

당신은 사용하고 있습니다악마터미널에서 분리되어 pid 파일을 훌륭하게 처리합니다.

따라서 다음을 추가하면:

pidfile="/var/run/${name}.pid"

다음을 변경하세요 start_cmd.

start_cmd="/usr/sbin/daemon -P ${pidfile} -u myuser $command"

그럼 가셔도 좋습니다.

간단한 rc 스크립트를 설명하는 또 다른 좋은 기사는 다음과 같습니다.Go 데몬을 위한 감독되는 FreeBSD rc.d 스크립트- 내용은 간단합니다.

#!/bin/sh
#
# PROVIDE: goprogram
# REQUIRE: networking
# KEYWORD:

. /etc/rc.subr

name="goprogram"
rcvar="goprogram_enable"
goprogram_user="goprogram"
goprogram_command="/usr/local/goprogram/goprogram"
pidfile="/var/run/goprogram/${name}.pid"
command="/usr/sbin/daemon"
command_args="-P ${pidfile} -r -f ${goprogram_command}"

load_rc_config $name
: ${goprogram_enable:=no}

run_rc_command "$1"

주요 차이점은 종속성이 아닌 pid 파일을 제어한다는 것입니다.$procname

관련 정보