Comment puis-je exécuter des scripts ? automatiquement au démarrage d'Ubuntu pour que je n'aie pas à les exécuter manuellement après le démarrage ?
El @reboot
Le mot clé est un bon conseil car il n'est pas très connu.
Comment puis-je exécuter des scripts ? automatiquement au démarrage d'Ubuntu pour que je n'aie pas à les exécuter manuellement après le démarrage ?
Une approche consiste à ajouter un @reboot cron tâche :
crontab -e
vous permettra de modifier votre cron.En y ajoutant une ligne comme celle-ci :
@reboot /path/to/script
exécutera ce script au démarrage de votre ordinateur.
Donc... cela ne fonctionnerait pas si je perdais du courant et que le PC se rallumait au retour du courant ?
Selon le type de scripts que vous devez exécuter Pour les services et autres, vous devez utiliser démarrage . Mais pour un utilisateur script ceux-ci devraient être lancés comme session par gnome ! Regardez dans Système > Préférences > Applications de démarrage.
En passant, si vous avez besoin que certains scripts soient exécutés lors de la connexion au terminal, vous pouvez les ajouter à l'option .bash_login dans votre répertoire personnel.
Une commande simple (qui n'a pas besoin de rester en cours d'exécution) pourrait utiliser un job Upstart comme :
start on startup
task
exec /path/to/command
Sauvegardez ceci dans un .conf
dans /etc/init
(si vous avez besoin qu'il soit exécuté en tant que root au démarrage du système), ou dans ~/.config/upstart
(si vous avez besoin qu'il qu'il s'exécute sous votre nom d'utilisateur lorsque vous vous connectez).
Compte tenu du fonctionnement de SO et de StackExchange, pourriez-vous donner un exemple d'un script et de l'endroit où il serait placé ? Cela rendrait la réponse bien meilleure. Votre lien dit qu'il n'est pas maintenu et de regarder le livre de recettes upstart, qui est huuuge. Je n'ai pas vraiment d'idée de par où commencer.
@dopatraman La réponse indique que tous les processus avec ceci sont exécutés en tant que root.
Vous pouvez ajouter des commandes à /etc/rc.local
:
sudo nano /etc/rc.local
Ceci exécute les commandes en tant que root.
Pour exécuter des commandes en tant qu'utilisateur spécifique, utilisez sudo -i -u
( -i
pour exécuter également le login Shell). Par exemple, pour établir un tunnel SSH persistant, où myhost
est défini dans johndoe
s ~/.ssh/config
archivo:
sudo -i -u johndoe autossh -nNT -L 1234:localhost:1234 myhost
Notez que si /etc/rc.local
n'existe pas (comme c'est le cas sur Ubuntu depuis 16.04), vous devez ajouter un fichier ligne shebang en haut (par exemple #!/bin/bash
), et assurez-vous que le fichier est exécutable :
sudo chmod a+x /etc/rc.local
Cela répond le plus directement à la question : comment exécuter simplement quelques scripts lorsque votre système démarre. upstart effectue une tâche plus complexe : lancer des processus de démons.
Donc upstart démarre les processus de démon tandis que /etc/rc.local démarre les scripts de bash ?
Pour gérer un (éphémère) 1 au démarrage en utilisant systemd
vous pouvez utiliser une unité systemd de type OneShot
. Par exemple, créez /etc/systemd/system/foo.service
contenant :
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Alors cours :
sudo systemctl daemon-reload
sudo systemctl enable foo.service
Essentiellement, il s'agit juste de convertir un travail typique d'Upstart à un systemd (voir Systemd pour les utilisateurs de Upstart ).
Vous pouvez exécuter plusieurs commandes à partir du même fichier de service, en utilisant de multiples ExecStart
lignes :
[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure
La commande doit toujours être donnée avec le chemin d'accès complet. Si une commande échoue, les autres ne sont pas exécutées. A -
avant le chemin indique à systemd d'ignorer un état de sortie non nul (au lieu de le considérer comme un échec).
Pertinent :
Pour les sessions utilisateur, vous pouvez créer l'unité systemd dans ~/.config/systemd
à la place. Cela devrait fonctionner à partir de la version 16.04, mais pas avec les versions antérieures d'Ubuntu avec systemd (puisque celles-ci utilisaient toujours Upstart pour les sessions utilisateur). Les unités de session utilisateur peuvent être contrôlées avec les mêmes commandes que pour les services système, mais avec l'option --user
option ajoutée :
systemctl --user daemon-reload
systemctl --user status foo.service
Notez que, contrairement à Upstart, systemd n'exécute pas la commande Exec*
à travers un Shell. Il effectue une expansion limitée des variables et une commande multiple (séparée par ;
) elle-même, mais c'est à peu près tout pour ce qui est de la syntaxe de type Shell. Pour tout ce qui est plus compliqué, comme les redirections ou les pipes, enveloppez votre commande dans sh -c '...'
o bash -c '...'
.
1 Par opposition aux démons à longue durée de vie.
Est-il possible de définir une priorité sur le travail ? ou de spécifier qu'il dépend d'un autre service pour être démarré en premier ?
@r3wt oui, il y a différentes façons de le faire. Le site WantedBy
utilisé ici, par exemple, fait en sorte qu'il démarre lorsque l'option multi-user.target
est atteint. Vous pouvez utiliser Before
, After
, Requires
etc. Voir man systemd.unit
$HOME/.config/autostart
contient la liste des applications de démarrage. .desktop
dans ce dossier seront exécutés au démarrage. Il peut avoir besoin de la permission d'être exécuté ( chmod +x startup.desktop
).
Exemple pour .desktop
archivo:
[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script
Ici "</path/to/script>"
est remplacé par le chemin d'accès à votre script.sh
Si vous placez votre script myscript
en /usr/local/bin
afin qu'il puisse être exécuté directement par une commande, vous pouvez écrire myscript
au lieu de "</path/to/script>"
.
Exemple de myscript.sh
:
#!/bin/bash
<commands to be executed>
exit
Résultat : .desktop
sera lancé à partir de $HOME/.config/autostart
qui exécutent script en Exec=
Ne fonctionne pas sur Ubuntu 18.04. $HOME/.config/autostart
ne contient qu'un seul fichier pour Dropbox, qui n'est pas exécutable.
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.
7 votes
Si quelqu'un pouvait également indiquer QUAND et OÙ, ce serait génial. Je dis cela parce que je sais qu'il y a au moins 2 façons de démarrer un script qui se déclenchera avant que d'autres applications aient été démarrées (comme X11)
3 votes
Ce fil de réponse entier est un désordre. Le format Stack Exchange ne semble pas être le mieux adapté à cette question.
4 votes
+1 à @GabrielFair. Une GRANDE partie du problème est que la question et la réponse originales datent de DIX ANS. J'ajouterais également qu'il y a trop de façons de résoudre ce problème. Qu'est-il arrivé à la simplicité de la philosophie Unix ! Demande à quelqu'un bien informé et avec des points suffisants réécrire ce post, ou ajouter une nouvelle, mise à jour, réponse définitive pour les versions modernes d'os.