Script Upstart para um daemon de transmissão executado como um usuário normal

4

Eu fiz um script para iniciar o daemon de transmissão como um usuário normal:

start on filesystem
stop on runlevel [!2345]

respawn
respawn limit 10 5

pre-start script
    test -x /usr/bin/transmission-daemon || { stop; exit 0; }
    test -d /home/user/.config/transmission-daemon || { stop; exit 0; }
end script

exec su -l -c 'transmission-daemon --foreground --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log' user

Este script funciona, mas vejo dois processos na execução do daemon de transmissão:

user     5041  0.0  0.0  48556  1516 ?        Ss   01:10   0:00 su -l -c transmission-daemon --foreground --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log user
user     5048  0.5  0.0 150432  2960 ?        Sl   01:10   0:00 transmission-daemon --foreground --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log

Isso está correto? Existe outra maneira de executar isso melhor?

Nota: O script de inicialização padrão do pacote de transmissão está desativado .

Mais informações :

Se eu executar a transmissão como um daemon (sem foreground ), o problema é o PID detectado pelo init:

start on filesystem
stop on runlevel [!2345]

expect fork

pre-start script
    test -x /usr/local/bin/transmission-daemon || { stop; exit 0; }
    test -d /home/mario/.config/transmission-daemon || { stop; exit 0; }
end script

exec sudo -u user transmission-daemon --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log

.

$ sudo initctl list | grep trans
trans-test start/running, process 3110

mas realmente esse é o PID do sudo ( processo finalizado ), o PID do daemon de transmissão é outro:

$ ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user     3148  0.0  0.0 154848  2708 ?        Ssl  13:33   0:00 transmission-daemon 
    
por Juan Simón 07.07.2011 / 01:15

4 respostas

2

Ok, a solução é iniciar o daemon de transmissão em primeiro plano ( não esperar fork ou daemon ) e esse start-stop-daemon cria o arquivo pid.
O roteiro completo:

description "Transmission daemon for user"

start on (local-filesystems and net-device-up IFACE=eth0 and runlevel [235])
stop on runlevel [016]

kill timeout 50

respawn

env USER=user
env PIDFILE=/var/run/transmission-user.pid

script
    DAEMON=$(which transmission-daemon) || exit 0
    CONFIGDIR=/home/$USER/.config/transmission-daemon

    exec start-stop-daemon --start --quiet --chuid $USER --pidfile $PIDFILE --make-pidfile --exec $DAEMON -- -f --config-dir $CONFIGDIR --logfile $CONFIGDIR/daemon.log
end script

post-stop exec rm -f $PIDFILE
    
por Juan Simón 23.10.2011 / 03:15
2

Usar --foreground está correto - você quer começar a acompanhar o andamento do processo de transmissão. Para omitir --foreground add expect daemon na configuração init que seguirá dois garfos do processo, que é como os serviços são executados.

Usar start-stop-daemon é sub-ótimo, já que o upstart não pode assistir ao seu processo e reabri-lo conforme necessário em caso de falha, etc.

Aqui está minha configuração:

start on (runlevel [2345] and filesystem and networking)
stop on runlevel [!2345]

respawn
kill timeout 30

setuid transmission

exec /usr/bin/transmission-daemon --foreground --config-dir /var/lib/transmission
    
por sj26 24.03.2013 / 12:25
1

Quando você inicia um aplicativo com su -c , o su aguardará o término do aplicativo. No seu caso, tendo adicionado a opção --foreground , faça a transmissão para não separar de seu pai. Portanto, você verá su como um processo pai de transimssion-daemon durante todo o tempo em que este último viver.

Se você remover essa opção, verá que su processo será finalizado assim que transmission-daemon passar para o segundo plano.

Além de remover essa opção que parece inoportuna para um serviço, sugiro usar

sudo -u <your-user> app-name options

em vez de su , sendo mais próximo do jeito do Ubuntu de fazer as coisas, e sendo mais simples de gerenciar opções sem a necessidade de usar aspas simples.

    
por enzotib 07.07.2011 / 13:13
-1

Minha versão:

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

# give time to send info to trackers
kill timeout 30

expect fork
respawn

script
        USER=debian-transmission
        test -f /etc/default/transmission-daemon && . /etc/default/transmission-daemon
        test "$ENABLE_DAEMON" != "0" || exit 0
        exec start-stop-daemon --start --quiet --chuid $USER --exec /usr/bin/transmission-daemon -- $OPTIONS
end script

Woks bons:

root@ubuntu-server:/etc/init# status transmission-daemon
transmission-daemon start/running, process 754
root@ubuntu-server:/etc/init# ps aux|grep [t]ransmission-daemon
torrent    754  0.0  1.1  41592  5596 ?        Ssl  Oct21   0:56 /usr/bin/transmission-daemon --auth --config-dir /var/lib/transmission-daemon/info
    
por Elbandi 22.10.2011 / 15:09