iniciando servidor com nohup e redirecionando entrada, saída

3

Eu tenho um script init.d que inicia um servidor de soquete python. Porque eu quero que isso seja executado como um daemon, eu uso nohup para iniciá-lo. Eu também quero redirecionar stdout e stderr para um arquivo de log. Meu problema é que também estou tentando capturar o PID do processo para salvar em um arquivo, o que não consigo fazer.

# Start server
echo "Starting server."
nohup ${PROGDIR}/${PROGNAME} -l $IPADDR >>${LOGDIR}/${OUTLOG} 2>>${LOGDIR}/${OUTLOG} </dev/null &
PID=$!

Isso foi capaz de capturar o PID, mas o redirecionamento não funcionou. (Eu estava redirecionando nohup ao invés do programa?)

Em seguida, tentei algo como:

nohup /bin/bash -c '...'

Mas perdi o PID. Neste ponto, eu parecia estar recebendo o PID de nohup /bin/bash -c . Como não estou muito familiarizado com os shell scripts, pensei em pedir ajuda antes de me atirar no pé.

Então, minha pergunta é: como posso capturar o PID e redirecionar a saída do servidor para o arquivo de log? Eu estou em um debian (raspberry pi) e estou escrevendo um script de init usando rc-update.d.

    
por nckturner 22.03.2013 / 01:51

1 resposta

2

Se você estiver em uma variante Debian, você tem start-stop-daemon available, que faz tudo isso para você de uma maneira muito mais limpa. Em particular:

start-stop-daemon --make-pidfile --pidfile "$PIDFILE" --background \
    --no-close --exec "${PROGDIR}/${PROGNAME}" --start -- -l "$IPADDR" \
    >> "${LOGDIR}/${OUTLOG}" 2>> "${LOGDIR}/${OUTLOG}" </dev/null

deve estar bem perto do que você quer. Ele coloca o PID em um arquivo em vez de em uma variável, mas você pode, naturalmente, lê-lo de volta em uma variável facilmente.

    
por 22.03.2013 / 07:26