Eu tenho uma prisão do FreeBSD na qual eu executo um servidor usando o comando:
/usr/sbin/daemon /path/to/script.py
No momento, tenho que executar esse comando toda vez que reinicio a máquina e a cadeia é iniciada. Eu gostaria de ter esse comando iniciado /etc/rc
. Existe uma maneira fácil de criar um script rc do FreeBSD para um daemon
comando?
ATUALIZAÇÃO: Li esta documentação do BSD sobre scripts rc e a partir disso criei o seguinte script em /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"
Isso funciona para iniciar o script python que eu estou querendo como daemon quando a cadeia começa ... (dado pytivo_enable="YES"
está em /etc/rc.conf
), mas o script rc não sabe se o daemon está em execução (ele pensa que não está quando está) e emite um aviso quando tento iniciá-lo:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
Portanto, está próximo e funciona , mas sinto que devo conseguir uma funcionalidade melhor que essa.
XX_enable="YES"
no /etc/rc.conf para iniciar automaticamente. Comece encontrando scripts existentesRespostas:
command
não deve conter várias palavras. Essa é a causa do[
erro que você vê. Você deve definir qualquer sinalizador separadamente.Além disso, você deve usar
pytivo_user
para definir o uid em execução, e nãodaemon -u
. Veja a página de manual do rc.subr (8) para todas essas variáveis mágicas.Além disso, você deve informar ao subsistema rc que pytivo é um script Python para que ele possa encontrar o processo ao verificar se está em execução.
Finalmente, você deve usar o idiomático
set_rcvar
pararcvar
.Algo assim (não tenho certeza se esse é o caminho correto do Python):
fonte
usr/local/pytivo/pyTivo.py
não daemonize , portanto, sem chamar/usr/bin/daemon
eu vou só pegar o comando em execução no forground quando eu corro/etc/rc.d/pytivo start
status
estop
!start_cmd
antes de ligarload_rc_config
:start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
Se você não precisa de um script rc, pode usar apenas /etc/rc.local.
Para o seu script rc, faltam comentários dependentes, pelo menos uma linha
deve ajudar, que seja executado no momento certo.
Você também pode precisar definir um arquivo pid
fonte
: /usr/sbin/daemon: unexpected operator
e meu script rc ainda não sabe se o script está realmente em execução.