2 votes

Comment démoniser un bash script seulement si le flag --daemon est donné ?

J'ai mon script.sh et que vous voulez l'exécuter avec ./script.sh o ./script.sh --daemon Il doit rester au premier plan, sauf si le drapeau --daemon est donné, auquel cas il doit se détacher et passer en arrière-plan de manière appropriée. Je veux que le script ait l'apparence suivante

[function definitions]

process_args

if [ "$BECOME_DAEMON" == "1" ]; then
    become_daemon
fi

while true; do
    read line <controller_fifo
    do_command $line
done

Est-il possible d'obtenir le comportement que je souhaite ? Si oui, que dois-je remplir pour become_daemon ? Sinon, quelle serait la meilleure solution ?

2voto

nullUser Points 643

J'ai trouvé ce qui suit pour fonctionner :

[function definitions]

process_args

function command_loop {
    trap handle_term SIGTERM

    while true; do
        read line <controller_fifo && do_command $line &
        wait
    done
}

if [ "$BECOME_DAEMON" == "1" ]; then
    command_loop &> /dev/null &
    disown
else
    command_loop 
fi

Notez que cette méthode gère le signal SIGTERM avec élégance dans les deux cas (démon ou pas), alors que la boucle de lecture originale que j'avais postée n'aurait pas géré un signal (le gestionnaire de signal n'aurait pas été appelé avant une autre ligne de lecture).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X