다음 명령을 사용하여 서버를 실행하는 FreeBSD 감옥이 있습니다.
/usr/sbin/daemon /path/to/script.py
현재는 머신을 재부팅하고 감옥이 시작될 때마다 이 명령을 실행해야 합니다. 이 명령을 처음부터 시작하고 싶습니다 /etc/rc
. 명령에 대한 FreeBSD rc 스크립트를 쉽게 생성할 수 있는 방법이 있습니까 daemon
?
고쳐 쓰다:나는 끝까지 읽었다rc 스크립트에 대한 이 BSD 문서, 다음에서 다음 스크립트를 만들었습니다 /etc/rc.d/pytivo
.
#!/bin/sh
. /etc/rc.subr
name=pytivo
rcvar=pytivo_enable
procname="/usr/local/pytivo/pyTivo.py"
command="/usr/sbin/daemon -u jnet $procname"
load_rc_config $name
run_rc_command "$1"
pytivo_enable="YES"
이것은 감옥이 시작될 때 데몬으로 원하는 Python 스크립트를 시작하는 데 작동합니다 /etc/rc.conf
. 경고를 발행합니다:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
그래서 그렇습니다폐쇄, 그리고 그것은일하다, 하지만 이보다 더 나은 기능을 얻을 수 있어야 한다고 생각합니다.
답변1
command
여러 단어를 포함할 수 없습니다. 이것이 당신이 보고 있는 오류의 원인입니다 [
. 플래그는 개별적으로 설정해야 합니다.
또한 pytivo_user
대신 를 사용하여 실행 중인 uid를 설정 해야 합니다 daemon -u
.rc.subr(8)이러한 모든 마법 변수에 대한 매뉴얼 페이지입니다.
또한 rc 하위 시스템에 pytivo가 Python 스크립트라는 사실을 알려서 프로세스가 실행 중인지 확인할 때 프로세스를 찾을 수 있도록 해야 합니다.
set_rcvar
마지막으로 for 관용어를 사용해야 합니다 rcvar
.
다음과 같습니다(이것이 올바른 Python 경로인지 확실하지 않습니다).
#!/bin/sh
# REQUIRE: LOGIN
. /etc/rc.subr
name=pytivo
rcvar=`set_rcvar`
command=/usr/local/pytivo/pyTivo.py
command_interpreter=/usr/local/bin/python
pytivo_user=jnet
start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
load_rc_config $name
run_rc_command "$1"
답변2
rc 스크립트가 필요하지 않으면 /etc/rc.local을 사용하면 됩니다.
rc 스크립트의 경우 종속성 주석이 누락되었습니다(한 줄 이상).
# REQUIRE: LOGIN
도움이 되면 적시에 실행됩니다.
pidfile을 정의해야 할 수도 있습니다.
pytivo_pidfile="/path/to/your/pidfile"