web-dev-qa-db-fra.com

Comment puis-je exécuter un script au démarrage sur Ubuntu Server 17.10?

Comment puis-je exécuter un script au démarrage sur une machine Ubuntu Server 17.10? Je pense que la méthode a été modifiée en 17.10.

13
Rodolfho

Placez le script dans la table cron de l'utilisateur approprié (c'est-à-dire le crontab ) avec un calendrier de @reboot.

Un utilisateur peut modifier sa table cron avec crontab -e.

Un exemple qui exécutera /path/to/script.sh au démarrage:

@reboot /path/to/script.sh

Si vous devez l'exécuter en tant que root, n'utilisez pas @reboot Sudo /path/to/script.sh;
utilisation Sudo crontab -eu root pour éditer la crontab de root.

Voir aussi: crontab (1), cron (8), crontab (8)

14
DopeGhoti

Ubuntu 15.04 et versions ultérieures utilisent par défaut quelque chose appelé systemd, qui est un programme (en quelque sorte) qui automatise les services et les procédures de démarrage. Vous pouvez créer le vôtre et l'ajouter à la liste des services de démarrage avec seulement un peu d'effort.

Service Systemd de base

Ceci est un barebones .service fichier qui pourrait être utilisé pour lancer mon python gui (aurait pu être un script Shell, cela n'a pas d'importance):

[Unit]
Description=Python GUI Server

[Service]
ExecStart=/home/pi/software/GUI_POE.py &

[Install]
WantedBy=multi-user.target

L'option Description est une chaîne qui décrit ce qu'est ou fait le service.

L'option ExecStart spécifie la commande à exécuter. Ici, je donne un chemin vers un exécutable python et j'utilise le & jeton pour l'exécuter en arrière-plan.

L'option WantedBy spécifie la priorité, en fonction de la cible qui souhaite utiliser ce service. Si vous n'avez pas besoin que votre service s'exécute à un moment très précis, définissez-le simplement sur multi-user.target.

Procédure de base

  1. Écrivez le script que vous souhaitez exécuter au démarrage à l'aide de nano ou de tout éditeur de votre choix. Assurez-vous d'inclure le Shebang approprié tout en haut du fichier (#!/bin/bash pour les scripts bash), et donnez-lui les autorisations exécutables avec chmod.

  2. Écrivez simplement votre service dans un fichier nommé my_service.service, puis copiez-le dans le bon répertoire avec cp my_service.service /lib/systemd/system/.

  3. Démarrez votre service: Sudo systemctl start my_service.service. Cela lance le script que vous avez demandé à votre service d'exécuter. La même commande avec "stop" au lieu de start la désactivera.

  4. Ajoutez votre service au processus de démarrage: Sudo systemctl enable my_service.service. Pour le supprimer, remplacez simplement "enable" par "disable" dans la même commande.

Et c'est tout! Gardez à l'esprit que votre script sera automatiquement exécuté avec les autorisations root, comme c'est le cas par défaut dans les services systemd.

Mon exemple simple (complet)

Pour référence, voici un simple service systemd que j'ai qui lance un simple Python GUI Server utilisant Dash:

[Unit]
Description=Python GUI Server
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi

[Install]
WantedBy=multi-user.target

Cet exemple de service utilise un script Python3 mais la formule est exactement la même pour un script Shell.

Une lecture plus approfondie peut être trouvée à cet excellent tutoriel par DigitalOcean, et ce fil AskUbunt avec une excellente réponse qui m'a aidé à apprendre systemd. J'espère que cela t'aides!

2
Tyrel Kostyk