Desanexe um daemon usando o sudo?

4

Percebi que sudo continua a ser executado após a execução de qualquer uma das seguintes linhas. Existe alguma maneira de desanexar o daemon completamente, então sudo não continua sendo executado?

sudo -u user daemon &
sudo -u user -b daemon
    
por Jane Watson 12.10.2011 / 10:39

4 respostas

5

Você pode fazer o plano de fundo de uma só vez assim:

sudo -u user sh -c "daemon & disown %1"

A análise com ps mostrará que daemon está sendo executado como user . Não haverá sudo associado a ele.

    
por 12.10.2011 / 20:42
3

sudo não permanece em execução depois de executar o programa solicitado; na verdade, ele usa a chamada do sistema exec() para substituir-se pelo programa que você especifica para que o programa tenha o mesmo PID que sudo fez. Você pode verificar isso executando os seguintes comandos:

sudo -u user -b sleep 60
ps aux | grep sudo
ps aux | grep sleep

Você verá que o sono ainda está em execução, mas o sudo não está.

Se você solicitar ao shell sudo com o operador & , o sudo irá bloquear e aguardar no fundo indefinidamente se ele solicitar sua senha. Se ele não solicitar sua senha, o programa especificado será executado e sudo não estará mais em execução. Devido ao potencial de bloqueio, a opção -b para sudo é o método preferencial, portanto, ele pode solicitar sua senha, se necessário, e, em seguida, será transferido para o plano de fundo para executar o programa solicitado.

    
por 12.10.2011 / 21:49
2

Desculpe, isso não é realmente uma resposta, é mais um comentário adicional.

Apesar da resposta do psusi, parece que algumas versões do sudo serão sempre fork() (e aguardará o processo filho se -b não for especificado).

O problema com o uso de -b é que $! não contém o PID do daemon; o problema com o uso de daemonize é que ele não é enviado com todas as distribuições; o problema com o uso de sudo sh -c 'run_my_daemon arg1 arg2 arg3... & save_pid $!' é que passar args para run_my_daemon é bastante contorcido; ficar longe de tais contorções é um dos principais motivos para usar o sudo em primeiro lugar.

Preocupar-se com a espera por uma senha só se aplica se você não for root para começar; em particular, considere o caso de usar sudo -u $run_as_uid prog "${args[@]}" dentro de um script que já está sendo executado como root.

    
por 09.01.2014 / 02:20
1

Se você tiver o programa daemonize , poderá usar sudo daemonize PATH_TO_DAEMON .

    
por 12.10.2011 / 18:05