usando a tela com start-stop-daemon, sysv

1

Estou tentando executar um programa com uma interface ncurse como um daemon usando a tela. Eu quero usar start-stop-daemon para gerenciar o processo, mas estou tendo problemas para criar um script de inicialização do SysV.

Variáveis:

NAME=rtorrent
CHDIR=/opt/$NAME
DAEMON=$NAME
DAEMON_ARGS="-d -m -S $NAME $DAEMON &> /dev/null"
USER=media
GROUP=media
PIDFILE=/var/run/$NAME.pid

Atualmente, minha função de início é esta:

do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    pgrep -F $PIDFILE > /dev/null 2>&1 || return 1
    start-stop-daemon --start --quiet --make-pidfile --pidfile $PIDFILE --chuid $USER:$GROUP --chdir $CHDIR --background --exec screen -- $DAEMON_ARGS || return 2
}

Mas isso é armazenar o ID do processo sleep . Concebivelmente, o daemon pode ficar inativo e deixar o processo sleep em execução

Minha função de parada precisa parar os dois, então eu tenho:

do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    pgrep -F $PIDFILE > /dev/null 2>&1 || return 1
    for i in 'ps -C $NAME -o pid=' ; do kill $i ; done
    pgrep -F $PIDFILE > /dev/null 2>&1 || return 2

    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
}

O que deve funcionar (ainda não testado), mas com o problema que derrubará qualquer outro processo criado por qualquer outro usuário com $NAME como em seu nome ou argumentos.

Acho que minha solução é que a minha função ps retorne apenas os pids dos nomes dos processos $NAME , que foram criados por $USER . Como esse daemon será executado sob um ID do usuário dedicado.

Não sei como obter essa saída. ps -C $NAME -u $USER o pid= me dá uma lista para cada partida, mas eu quero uma lista para ambas as partidas. Incase eu decido que este usuário pode lidar com algum outro processo mais tarde.

Além disso, que tal recarregar? start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME recarregará o processo screen , recarregará o daemon? Existe uma maneira melhor? Qualquer ajuda muito apreciada.

    
por John David Ravenscroft 14.08.2012 / 13:25

0 respostas