Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Résumé de la page de man de start-stop-daemon

Syntaxe

  • start-stop-daemon [<option> ...] <command>

Commandes

Forme brèveForme longue
-S–start – <arguments> …lance un programme et lui passe les arguments <arguments>
-K–stoparrête un programme
-T–statusobtient l'état du programme
-H–helpaffiche de l'aide
-V–versionaffiche la version

Matching options (il en faut au moins une)

-p–pidfile <pid-file>fichier pid à vérifier
-x–exec <executable>programme à démarrer ou dont on veut vérifier s'il tourne
-n–name <process-name>nom du processus à vérifier
-u--user <username|uid>propriétaire de processus à vérifier

Options

-g–group <group|gid>lancer ce processus sous ce groupe
-c--chuid <name|uid[:group|gid]>se placer sous cet utilisateur ou ce groupe avant de lancer le processus
-s–signal <signal>signal à envoyer (TERM par défaut)
-a–startas <pathname>programme à lancer (par défaut : <exécutable>)
-r–chroot <directory>s'enfermer (chroot) dans <répertoire> avant de démarrer
-d–chdir <directory>aller à <directory> (/ par défaut)
-N–nicelevel <incr>ajouter incr au niveau du processus
-P–procsched <policy[:prio]>utiliser <policy> avec <prio> pour le gestionaire de processus du noyau (prio = 0 par défaut)
-I–iosched <class[:prio]>utiliser <class> avec <prio> pour pour l'ordonnanceur d'entrées/sorties (prio = 4 par défaut)
-k–umask <mask>changer umask en <masque> avant de commencer
-b–backgroundforcer le processus à se détacher
-C–no-closene fermer aucun descripteur de fichier
-m–make-pidfilecréer le fichier de pid avant de commencer
-R–retry <schedule>vérifier si le processus a été tué et et réessayer
-t–testmode de test, ne fait rien
-o–oknodoretourne 0 (au lieu de 1) si rien n'est fait fait
-q–quietplus calme
-v–verboseplus bavard

Retry <schedule> is <item>|/<item>/… where <item> is one of

  • -<signal-num>|[-]<signal-name>

    : send that signal

  • <timeout>

    : wait that many seconds

  • forever : repeat remainder forever

or <schedule> may be just <timeout>, meaning <signal>/<timeout>/KILL/<timeout>

The process scheduler <policy> can be one of:

other, fifo or rr

The IO scheduler <class> can be one of:

real-time, best-effort or idle

Exit status

0 = done
1 = nothing done (⇒ 0 if –oknodo)
2 = with –retry, processes would not die
3 = trouble

Exit status with --status

0 = program is running
1 = program is not running and the pid file exists
3 = program is not running
4 = unable to determine status

Nom

  • start-stop-daemon - lance ou arrête des démons système

Synopsis

  • start-stop-daemon [option...] commande

Description

  • start-stop-daemon permet de gérer le lancement ou l'arrêt d'un processus système.
  • Avec les bonnes options, start-stop-daemon peut trouver les instances d'un processus en fonctionnement.
  • start-stop-daemon se comporte comme killall sauf utilisation de –pidfile.
  • Il recherche dans le tableau des processus le nom ou le gid indiqué.
  • Toute correspondance empêche –start de démarrer le démon.
  • Les processus trouvés recevront le signal TERM (ou le signal indiqué par –signal or –retry).
  • Si un démon doit survivre à un –stop, il faut indiquer un fichier pid (« pidfile »).

Commandes

courtelongueexplications
-S [--] paramètres
--start [--] paramètres
* S'il existe une instance du processus, start-stop-daemon se termine et retourne le code 1
* Sinon, une nouvelle instance est lancée.\\Tout argument donné après -- sur la ligne de commande est passé tel quel au programme lancé.
-K
--stop
* S'il existe une instance du processus, start-stop-daemon lui envoie le signal précisé par –signal et retourne le code 0.
* Sinon, il se termine et retourne le code 1.
* Si –retry est indiquée, start-stop-daemon recherche si le processus ou les processus se sont bien terminés.
-T
--status
* S'il existe une instance du processus, start-stop-daemon retourne un code défini par les actions des scripts d'initialisation de la LSB (« LSB Init Script Actions »)
-H
--help
Affiche un message d'aide et quitte.
-V
--version
Affiche la version et le copyright du programme et quitte.

Options de correspondance

courtelongueexplications
-p
--pidfile pid-file
Contrôle si un processus a créé le fichier fichier-pid.

Si l'ancien processus s'est terminé sans avoir effacé le fichier-pid, cette option peut donner des résultats imprévisibles

-x
--exec exécutable
Contrôle l'existence d'instances de cet exécutable. Le paramètre exécutable doit être un chemin absolu.

Cela peut ne pas fonctionner avec des scripts interprétés (l'exécutable est alors l'interpréteur).

-n
--name nomdeprocessus
Contrôle l'existence de processus nommés nom-de-processus.
Le nom-de-processus est en général le nom du fichier du processus.

sur la plupart des systèmes, ce nom a une longueur limitée (15 caractères souvent, pour des raisons de portabilité).

-u
--user nomdutilisateur|uid
Contrôle l'existence de processus dont le propriétaire est identifiant ou uid.

Si cette option est utilisée seule, tous les processus de cet utilisateur seront concernés par l'action.

Options

courtelongueexplications
-g
--group group|gid
Modifie le group ou le gid au début du processus.
-s
--signal signal
L'action --stop définit le signal d'arrêt à envoyer au processus (par défaut : TERM).
-R
--retry durée|action-prévue
Avec l'action –stop, start-stop-daemon doit vérifier que les processus se sont terminés.
Il le fait pour tous les processus correspondants qui tournent, jusqu'à ce qu'il n'y en ait plus.
action-prévue Action à exécuter si le processus ne se termine pas.
durée : l'action-prévue signal/durée/KILL/durée est utilisée, où signal est le signal indiqué par –signal.
action-prévue est une liste d'au moins deux items séparés par des barres obliques (/) ; chaque item peut être de la forme -signal-number ou de la forme [-]signal-name, ce qui demande d'envoyer ce signal ; ou bien de la forme durée, ce qui demande d'attendre tant de secondes avant de terminer les processus, ou bien de la forme forever, ce qui demande de répéter constamment le reste de action-prévue, si nécessaire.
Quand l'action-prévue se termine et sans le paramètre forever, start-stop-daemon se termine avec un code 2.
Quand une action-prévue est indiquée, tout signal donné par –signal est ignoré.
-a
--startas chemin/nom
Avec l'action –start, lance le processus spécifié par chemin/nom.
Si rien n'est précisé, c'est par défaut l'argument donné à –exec.
-t
--test
Affiche les actions qui seraient entreprises et détermine la bonne valeur de retour, mais ne fait rien.
-o
--oknodo
si rien n'est fait, retourne 0 au lieu de 1.
-q
--quiet
-c
--chuid identifiant|uid[:groupe|gid]
Change pour cet utilisateur ou « uid » avant de lancer le processus.
On peut aussi préciser un groupe en ajoutant un :, puis le groupe ou un « gid » de la même façon qu'avec la commande « chown » (utilisateur:groupe).
Lorsqu'un utilisateur est indiqué mais pas de groupe alors le groupe primaire de celui-ci est utilisé.
Quand on utilise cette option, on doit veiller à ce que les groupes primaires ainsi que les groupes secondaires existent bien, même si l'option –group n'est pas spécifiée.
L'option –group sert seulement pour les groupes dont l'utilisateur n'est pas membre (c'est comme rendre membre d'un groupe-pour-processus des utilisateurs génériques comme nobody).
-r
--chroot root
Change de répertoire racine pour root avant de lancer le processus. Remarquez que le « pidfile » est aussi écrit après le changement de racine.
-d
--chdir path
Change de répertoire pour chemin avant de commencer le processus.
Cela est fait après le changement de répertoire racine si l'option -r
–chroot est demandée.
Si rien n'est demandé, start-stop-daemon changera de répertoire racine avant de commencer le processus.
-b
--background
Utilisé généralement pour les programmes qui ne « se détachent » pas d'eux-mêmes.
Cette option oblige start-stop-daemon à se dupliquer (fork) avant de lancer le processus et l'oblige à passer en arrière-plan.
AVERTISSEMENT : start-stop-daemon ne peut pas vérifier le code de sortie quand, pour une raison ou une autre, le processus échoue.
C'est un expédient dont on se servira seulement pour des programmes dont la duplication n'a pas de sens ou bien des programmes dont le code n'est pas adaptable pour leur ajouter cette fonctionnalité.
-C
--no-close
Ne fermer aucun descripteur de fichiers en forçant le démon à s'exécuter en arrière-plan.
Utilisé à des fins de débogage afin de voir ce qu'affiche le processus ou pour rediriger les descripteurs de fichiers pour journaliser l'affichage du processus.
N'est pertinent que lors de l'utilisation de –background.
-N
--nicelevel int
modifie la priorité du processus avant qu'il ne soit lancé.
-P
--procsched politique:priorité
Modifie la politique du programmateur de processus (« process scheduler policy ») et la priorité du processus avant de le démarrer.
La priorité peut être indiquée de manière facultative avec : suivi de la valeur souhaitée.
La priorité par défaut est 0.
Les valeurs de politiques actuellement gérées sont other, fifo et rr.
-I
--iosched classe:priorité
Modifie la classe du programmateur d'entrée/sortie (« IO scheduler ») et la priorité du processus avant de le démarrer.
La priorité peut être indiquée de manière facultative avec : suivi de la valeur souhaitée.
La priorité par défaut est 4, sauf si classe est idle, auquel cas priorité sera toujours égale à 7.
Les valeurs de classe actuellement gérées sont idle, best-effort et real-time.
-k
--umask mask
modifie le masque utilisateur du processus avant qu'il ne soit lancé.
-m
--make-pidfile
Utilisé lors du lancement d'un programme qui ne crée pas son propre fichier identificateur « pid ».
Cette option indique à start-stop-daemon de créer le fichier référencé par –pidfile et placer le « pid » dans ce fichier juste avant d'exécuter le processus.
Il faut remarquer que ce fichier n'est pas supprimé quand le programme s'arrête.
NOTE : il se peut que cette caractéristique ne marche pas dans tous les cas.
Notamment quand le programme qui est exécuté se duplique.
À cause de cela, cette option n'est habituellement utile que combinée avec l'option –background.
-v
--verbose
Affiche des messages nombreux.

Codes de sortie

0L'action demandée a été effectuée.
Si –oknodo était indiqué, il est également possible que rien ne se soit passé.
Cela peut se produire si –start était indiqué et qu'un processus correspondant était déjà en train de s'exécuter ou –stop était indiqué et qu'aucun processus ne correspondait.
1Si –oknodo n'était pas indiqué et que rien ne s'est passé.
2Si –stop et –retry étaient indiqués mais que la fin de la planification a été atteinte et que les processus étaient toujours en cours d'exécution.
3Toute autre erreur.

Avec la commande –status :

0Le programme est en cours d'exécution.
1Le programme n'est pas en cours d'exécution et le fichier PID existe.
3Le programme n'est pas en cours d'exécution.
4Impossible de déterminer l'état du programme.

Exemple

Démarrer le démon foo, à moins qu'il ne soit déjà en cours d'exécution (un processus nommé foo, tournant sous le nom d'utilisateur foo, avec un pid dans foo.pid) :

start-stop-daemon --start --oknodo --user foo --name foo \
    --pidfile /run/foo.pid --startas /usr/sbin/foo \
    --chuid foo -- --daemon

Envoyer le signal SIGTERM à foo et attendre son arrêt durant 5 secondes :

start-stop-daemon --stop --oknodo --user foo --name foo \
    --pidfile /run/foo.pid --retry 5

Démonstration d'un ordonnanceur personnalisé pour l'arrêt de foo :

start-stop-daemon --stop --oknodo --user food --name food \
    --pidfile /run/food.pid --retry=TERM/30/KILL/5