Réponses:
Mettez le script dans la cron
table de l'utilisateur approprié (c'est-à-dire la crontab ) avec un planning de @reboot
.
Un utilisateur peut modifier sa cron
table avec crontab -e
.
Un exemple qui s'exécutera /path/to/script.sh
au démarrage:
@reboot /path/to/script.sh
Si vous devez l'exécuter en tant que root, ne l'utilisez pas @reboot sudo /path/to/script.sh
;
utiliser sudo crontab -eu root
pour éditer la crontab de root.
Voir aussi: crontab (1), cron (8), crontab (8)
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 .service
fichier barebones qui pourrait être utilisé pour lancer mon serveur python gui (aurait pu être un script shell, peu importe):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
L' Description
option est n'importe quelle chaîne décrivant ce qu'est ou fait le service.
L' ExecStart
option spécifie la commande à exécuter. Ici, je donne un chemin vers un script python exécutable et j'utilise le &
jeton pour l'exécuter en arrière-plan.
L' WantedBy
option 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
Écrivez le script que vous souhaitez exécuter au démarrage en utilisant nano
ou n'importe quel é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 des autorisations exécutables avec chmod
.
É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/
.
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.
Ajouter 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 serveur GUI Python 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.
Pour en savoir plus, consultez cet excellent didacticiel de DigitalOcean et ce fil AskUbuntu avec une excellente réponse qui m'a aidé à apprendre systemd. J'espère que cela t'aides!