Evitar que o daemon de init seja exibido em TTY

0

Abaixo está um script init que inicia / pára um daemon. O daemon está, infelizmente, imprimindo os dados de pacotes analisados (de /home/nuthan/program/server ), um servidor de soquetes escrito em perl, ouvindo um soquete para pacotes tcp de um cliente.

Assim que inicio o serviço, os dados analisados (instruções de impressão de /home/nuthan/program/server ) são ecoados no meu TTY. E, se eu tentar matar o terminal, o daemon será encerrado. Como eu supero isso?

Comando

daemon e logging packet data

 daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon
#!/bin/bash
#
# vts      Start/Stop Vts.
#
# description: VTS daemon for vehicle Tracking.
# Source function library
. /etc/init.d/functions

# Get network config
. /etc/sysconfig/network

RETVAL=0

start() {
echo -n $"Starting vts: "
# Start me up!
daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/vts
    touch /var/lock/subsys/vts
return $RETVAL

}

stop() {
echo -n $"Stopping vts: "
killproc vts
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/vtsdaemon
return $RETVAL
}

restart() {
  stop
start
}

reload() {
stop
start
}

case "$1" in
  start)
  start
;;
  stop)
  stop
;;
  status)
status vts
;;
  restart)
  restart
;;
  condrestart)
  [ -f /var/lock/subsys/vts ] && restart || :
;;
  reload)
reload
;;
  *)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
exit 1
esac

exit 0
    
por nuthan 16.01.2012 / 11:19

3 respostas

2

Você está misturando três comandos: deamon , perl e /home/nuthan/program/server sem nenhuma aspas. Pense no seguinte: Como cada um deles sabe quais parâmetros ele deve interpretar?

A sintaxe que você usou provavelmente só poderia ser interpretada corretamente se:

  • deamon trataria tudo depois de -18 ser o comando para executar
  • perl interpretaria apenas o primeiro parâmetro ( /home/nuthan/program/server ) como o script a ser executado, e tudo o que segue como parâmetros passados para esse script

Posso sugerir duas coisas para corrigir os problemas:

  1. Verifique se você precisa chamar perl explicitamente. Se o script server contiver uma declaração de intérprete apropriada (provavelmente /usr/bin/perl ) em sua primeira linha e tiver um bit executável definido, não será necessário chamar explicitamente perl .
  2. Verifique a sintaxe do comando daemon . Se isso indica que tudo após -18 (em seu comando) deve ser tratado como um comando completo para executar, então está tudo bem. Caso contrário, você pode precisar de tudo o que se segue entre aspas ou criar uma função adicional ou um script de wrapper que executaria todo o seu comando - assim, toda a linha de comando escrito seria alterado para daemon -18 your_function ou daemon -18 /path/to/your/wrapper_script.sh .
por 16.01.2012 / 12:49
0
daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon
RETVAL=$? 2>&1 1>/some/where/over_the_rainbow

Mas note que parece que o -O já deveria fazer parte do tipo, como deveria esse "daemon" para que pudesse haver mais coisas do que os olhos.

    
por 16.01.2012 / 11:47
0

Você superaria isso redirecionando stdout para o abismo ( /dev/null ) e redirecionando stderr para onde stdout é redirecionado. /dev/null descarta tudo o que recebe. Então, algo assim poderia funcionar:

daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon >/dev/null 2>&1
    
por 16.01.2012 / 12:05