web-dev-qa-db-fra.com

Comment démarrer une application automatiquement au démarrage

Je suis nouveau sur Linux et j'ai hâte de démarrer l'application (qui bascule une led toutes les 10 secondes). J'ai écrit le programme d'application et cela fonctionne bien mais maintenant je veux le démarrer automatiquement au démarrage.

La documentation ici dit de copier le script de démarrage dans le /etc/init.d et créez un lien symbolique vers le script copié dans le rc.d répertoire.

Quelle devrait être l'extension et le nom de ces fichiers de script? Pouvons-nous ajouter manuellement le lien symbolique dans rc.d ou existe-t-il une procédure spécifique pour cela?

Une suggestion sur la façon d'y parvenir?

28
gorge

Voici l'extrait de http://www.debian-administration.org/articles/28 qui semble répondre à votre question.

Remarque: Dans l'exemple de script ci-dessous, ajoutez simplement un appel à la section "start)" Pour lancer réellement votre programme. Vous pouvez tester la fonctionnalité du script sans redémarrer le système: appelez-le avec le chemin complet et donnez-lui un paramètre de "start" ou "stop"

Voici:

Debian utilise un système d'initialisation de type Sys-V pour exécuter des commandes lorsque le niveau d'exécution du système change - par exemple au démarrage et à l'arrêt.

Si vous souhaitez ajouter un nouveau service à démarrer au démarrage de la machine, vous devez ajouter le script nécessaire dans le répertoire /etc/init.d/. De nombreux scripts déjà présents dans ce répertoire vous donneront un exemple du genre de choses que vous pouvez faire.

Voici un script très simple qui est divisé en deux parties, du code qui s'exécute toujours et du code qui s'exécute lorsqu'il est appelé avec "start" ou "stop".

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

Une fois que vous avez enregistré votre fichier à l'emplacement correct, assurez-vous qu'il est exécutable en exécutant "chmod 755 /etc/init.d/blah".

Ensuite, vous devez ajouter les liens symboliques appropriés pour que le script soit exécuté lorsque le système tombe en panne ou monte.

La façon la plus simple de le faire est d'utiliser la commande spécifique à Debian update-rc.d:

root@skx:~# update-rc.d blah defaults
 Adding system startup for /etc/init.d/blah ...
   /etc/rc0.d/K20blah -> ../init.d/blah
   /etc/rc1.d/K20blah -> ../init.d/blah
   /etc/rc6.d/K20blah -> ../init.d/blah
   /etc/rc2.d/S20blah -> ../init.d/blah
   /etc/rc3.d/S20blah -> ../init.d/blah
   /etc/rc4.d/S20blah -> ../init.d/blah
   /etc/rc5.d/S20blah -> ../init.d/blah
19

L'utilisation de crontab est beaucoup plus facile.

Utilisation crontab -e pour modifier la crontab de l'utilisateur.
Ajoutez la ligne suivante à la fin:

@reboot <command>

Exemples:

  • @reboot my_script.sh
  • @reboot python my_script.py arg1 arg2

Enfin, utilisez crontab -l pour vous assurer que votre script a bien été ajouté à la liste.

Par exemple, cette ligne ajoutera un travail qui exécute script.sh à chaque redémarrage:

crontab -l > file; echo "@reboot /home/user/script.sh" >> file; crontab file; rm file;

crédit à: Gumby The Green 16 juil. 19 à 10:20

https://stackoverflow.com/users/9364000/gumby-the-green

8
Jithin Pavithran

Nouvelles versions de linux supportsystemd (comme l'a dit @AlexanderShcheblikin). Il a plus de fonctionnalités et est plus portable que la solution spécifique à Debian.

Veuillez lire ce très bon guide .

Voici une référence rapide du strict minimum nécessaire:

  1. Un script (par exemple myscript.sh) avec des autorisations exécutables.
  2. Un fichier d'unité (par exemple myservice.service) avec l'extension ".service" dans /etc/systemd/system avec 644 autorisations qui contient la commande pour exécuter le script. Par exemple,

:

[Unit]
Description=Example systemd service.

[Service]
Type=simple
ExecStart=/bin/bash /path/to/myscript.sh

[Install]
WantedBy=multi-user.target
  1. Exécutez la commande Sudo systemctl enable myservice pour lui permettre de démarrer au démarrage.
4
mareoraft

La meilleure façon est de vérifier la source du package de votre distribution pour un service système régulier, par ex. pour OpenSSH - vous verrez quelles sont les bonnes pratiques. Après tout, l'une des raisons de l'open-source est de pouvoir apprendre des sources.

4
peterph

Utilisez Supervisor, un programme efficace qui gère et enregistre les applications de démarrage avec des arguments. En savoir plus sur http://supervisord.org/running.html et (Suivez les instructions d'installation.

Créez un fichier de conf à /etc/supervisor/conf.d/{PROGRAM_NAME}.conf et voici le code,

[program:{PROGRAM_NAME}]
command=/usr/bin/{PROGRAM_NAME} -arg1 -arg2
autostart=true  
autorestart=true  
stderr_logfile=/var/log/supervisor/{PROGRAM_NAME}.err.log  
stdout_logfile=/var/log/supervisor/{PROGRAM_NAME}.out.log  

Exécutez ensuite à partir de la ligne cmd:

supervisorctl reload

3
Cosmo Arun