Arthur Knowledge Base

Mémoire, Tutorials, Bouts de code et bien plus
fr en

Lancer Un Processus Au Démarrage

2018-06-13 Linux

Il est parfois utile de lancer un processus lorsqu’un serveur ou qu’un ordinateur linux démarre. Sur Mac OS, c’est plutot simple, il suffit de cliquer sur le processus dans le dock. Malheureusement, sous linux, avec une console, c’est tout de suite plus compliqué…

Personalisez l'article




Les valeurs ne sont pas sauvegardées, rafraichissez la page pour réinitialiser le formulaire

Méthode 1 : Utiliser votre crontab

Avantages de la méthode

  • Simple à configurer
  • Lance un programme en votre nom

Points à considèrer

  • Impossible de voir/intéragir avec la console
  • Si votre programme affiche des choses, elles vous seront envoyées par mail local

Comment l’utiliser

Ouvrez votre crontab avec crontab -e puis ajoutez la ligne suivante :

@reboot §§cmd§§

Méthode 2 : Utiliser la crontab du systeme

Avantages de la méthode

  • Simple à configurer
  • Lance un programme en tant qu’un autre utilisateur

Points à considèrer

  • Impossible de voir/intéragir avec la console
  • Nécéssite d’être root pour écrire dans la crontab systeme.

Comment l’utiliser

Ouvrez la crontab avec votre éditeur favori: sudo nano /etc/crontab

puis ajoutez la ligne suivante :

@reboot §§user§§ §§cmd§§

Méthode 3 : Utiliser systemd

Avantages de la méthode

  • Extrèmement configurable
  • Lance un programme en tant qu’un autre utilisateur
  • Permet de simplifier les scripts de lancement en prennant en compte le re-lancement, la vérification de certaines conditions, le changement de répertoire, et bien plus

Points à considèrer

  • Impossible de voir/intéragir avec la console
  • Nécéssite d’être root pour écrire dans la crontab systeme.
  • Plus complexe à configurer

Comment l’utiliser

Creez et ouvrez le fichier service dans votre éditeur favori : sudo nano /etc/systemd/system/§§name§§.service

Ajoutez les lignes suivantes :

# Ceci est un service systemd basique crée à l'aide de 
# kb.api-d.com/posts/lancer-un-processus-au-demarrage

# Pour en savoir plus sur les options disponibles
# la documentation est disponible ici :
# https://www.freedesktop.org/software/systemd/man/systemd.unit.html#%5BUnit%5D%20Section%20Options

[Unit]
After=network.target
Description=Lancement au démarrage de §§name§§
# Vérifier qu'un répertoire existe au démarrage
#AssertPathExists=/what/ever
[Service]

# Un service simple
# Forking si la commande/le script invoque un screen, par exemple
Type=simple

# Commande de démarrage
# Doit etre un PATH absolu vers un script.
# Peut commencer par /bin/bash
ExecStart=§§cmd§§

# Commande d'arret, si nécéssaire
#ExecStop=§§cmd§§ stop

# Répertoire de travail du service, si nécéssaire
WorkingDirectory=/home/§§user§§

# Utilisateur et groupe
User=§§user§§
Group=§§user§§

# Redémarrage en cas de plantage
# ou always, on-abort, etc
Restart=on-failure 

# Temps avant lequel le service sera tué lors d'une commande stop si celle-ci ne réponds pas
TimeoutStopSec=300

# Valeur de nice du service
#Nice=5

[Install]
WantedBy=multi-user.target

N’oubliez pas de rendre votre script exécutable:

chmod 744 /etc/systemd/system/§§name§§.service

Enfin, préparez et lancez votre service:

systemctl daemon-reload
systemctl enable §§name§§.service

Pour lancer votre service immédiatement, tapez :

systemctl start §§name§§.service

Informations supplémentaires

Pour cela, utilisez la commande suivante:

# Le exec bash permet de garder le screen vivant.
/usr/bin/screen -dmS §§name§§ bash -c '§§cmd§§; exec bash'

Et, si l’on veut une boucle, par exemple dans le cas de la crontab :

/usr/bin/screen -dmS §§name§§ bash -c 'while true; do §§cmd§§; sleep 5; done; exec bash'