Question Comment exécuter des scripts au démarrage?


Comment puis-je exécuter des scripts automatiquement quand Ubuntu démarre pour ne pas avoir à les exécuter manuellement après le démarrage?


456
2017-08-04 19:54


origine


Si quelqu'un pouvait aussi montrer à la fois WHEN et WHERE 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) - Buttink
Ce fil de réponse complet est un gâchis. Le format Stack Exchange ne semble pas être le mieux adapté à cette question - Gabriel Fair
C'est en fait assez amusant. Combien de façons différentes pourrait-il y avoir? - devios1


Réponses:


Selon le type de scripts que vous devez exécuter .. Pour les services et autres, vous devez utiliser parvenu. Mais pour un script utilisateur, ceux-ci devraient être lancés en tant que scripts de session par gnome! Jetez un œil sous Système> Préférences> Applications de démarrage.

Sur une note de côté, si vous avez besoin que certains scripts soient exécutés lors de la connexion au terminal, vous pouvez les ajouter au .bash_login fichier dans votre répertoire personnel.

Pour 14.04 et plus

Une commande simple (qui n'a pas besoin de rester en cours d'exécution) pourrait utiliser un travail Upstart comme:

start on startup
task
exec /path/to/command

Enregistrez ceci dans un .conf déposer dans /etc/init (si vous en avez besoin pour exécuter en tant que root lorsque le système démarre), ou dans ~/.config/upstart (si tu en as besoin pour exécuter en tant que votre utilisateur lorsque vous vous connectez).


191
2017-08-04 23:26



Compte tenu de l'exécution de SO et StackExchange, pourriez-vous donner un exemple de script upstart et où il serait placé? Cela en ferait une bien meilleure réponse. Votre lien indique qu’il n’est pas maintenu et que vous devez regarder le livre de recettes, qui est huuuge. Je ne sais pas trop par où commencer. - Ehtesh Choudhury
Et si j'ai besoin d'exécuter la commande en tant que root? - dopatraman
@dopatraman La réponse indique que tous les processus avec ceci sont exécutés en tant que root. - cybermonkey
Veuillez mettre à jour cette réponse pour expliquer ce qu'il faut faire sur les systèmes exécutant systemd plutôt que sur les nouveaux venus (Ubuntu 15.04+).
Cette réponse n'a pas de sens pour moi. Les applications listées dans system->pref->startup applications ne peut être trouvé dans /etc/init/ ni en ~/.config/upstart. Alors où sont définies les applications de démarrage? - Blauhirn


Une approche consiste à ajouter un @reboot cron tâche:

  1. Fonctionnement crontab -e vous permettra de modifier votre cron.
  2. Ajouter une ligne comme celle-ci:

    @reboot /path/to/script
    

    va exécuter ce script une fois que votre ordinateur démarre.


476
2017-08-04 19:57



le @reboot Le mot-clé est un bon conseil car il n'est pas très connu. - jathanism
Agréable. Une idée exactement quand cela déclenche? - Oli♦
Donc ... cela ne fonctionnerait pas si je perdais de la puissance et que le PC était de nouveau allumé lorsque le courant était rétabli? - Mike Wills
@ Miami: man 5 crontab dit ça @reboot est exécuté au démarrage (lorsque le démon cron est démarré). - jfs
C'est génial. Jusqu'à présent, cela semble mieux que rc.local puisque le système semble plus configuré par ce point (PATH, etc.). Il est étrange qu'il soit si difficile d'appeler quelque chose après démarrage du système .. - Karthik T


Que diriez-vous d'ajouter la commande à /etc/rc.local? Vous devrez cependant utiliser sudo access pour éditer ce fichier.

sudo nano /etc/rc.local

135
2017-08-05 16:40



Cela répond le plus directement à la question: comment exécuter simplement des scripts lorsque votre système démarre. upstart effectue une tâche plus complexe: lance les processus démons. - Dogweather
Donc, le démarrage de processus démon commence alors que /etc/rc.local démarre les scripts bash? - Donato
Cela devrait être la réponse acceptée ... - Android Dev
Devrait-il? Cela ne fonctionne plus ces jours-ci, non? - DaVince
Travailler avec Ubuntu 17.04 systemd - qodeninja


Il existe différentes manières d'exécuter automatiquement des commandes:

  1. le parvenu le système exécutera tous les scripts à partir desquels il trouve une configuration dans le répertoire /etc/init. Ces scripts s'exécuteront au démarrage du système (ou en réponse à certains événements, par exemple une demande d'arrêt) et seront donc l'endroit où exécuter des commandes qui n'interagissent pas avec l'utilisateur. tous les serveurs sont démarrés en utilisant ce mécanisme.

    Vous pouvez trouver une introduction lisible à: http://upstart.ubuntu.com/getting-started.html les pages de manuel man 5 init et man 8 init vous donner tous les détails.

  2. Un script shell nommé .gnomerc dans votre répertoire personnel est automatiquement source chaque fois que vous vous connectez à une session GNOME. Vous pouvez y placer des commandes arbitraires. Les variables d'environnement que vous définissez dans ce script seront visibles par tous les programmes que vous exécuterez dans votre session.

    Notez que la session ne démarre pas avant la .gnomerc le script est terminé; par conséquent, si vous souhaitez démarrer automatiquement un programme de longue durée, vous devez ajouter & à l'appel du programme, afin de le détacher du shell en cours d'exécution.

  3. L'option de menu Système -> Préférences -> Applications de démarrage vous permet de définir quelles applications doivent être lancées au démarrage de votre session graphique (Ubuntu en prédéfinit certaines), et de les ajouter ou de les supprimer à votre goût. Cela a presque le même objectif et la même portée que .gnomerc script, sauf que vous n'avez pas besoin de savoir sh syntaxe (mais vous ne pouvez pas non plus utiliser de sh construction de programmation).


68
2017-08-05 14:02



3) "Cela a presque le même objectif et la même portée que le script .gnomerc", sauf .gnomerc apparemment court avant unité de chargement, et Startup Applications apparemment court après unité de chargement. J'ai dû exécuter un programme qui se trouve sur la barre de menus d'Unity et cela a fait une énorme différence dans ce cas! - That Brazilian Guy
@ ruda.almeida Merci de le signaler. La réponse a été écrite dans les jours précédant l'Unité. - Riccardo Murri
sudo update-rc.d myscript.sh defaults, où /etc/init.d/myscript.sh est votre script, l'exécute également au démarrage. - Dan Dascalescu


Pour 15.04 et plus tard:

Pour courir un (éphémère)1 commande au démarrage en utilisant systemd, vous pouvez utiliser une unité systemd de type OneShot. Par exemple, créer /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

Puis lancez:

sudo systemctl daemon-reload
sudo systemctl enable foo.service

Essentiellement, cela ne fait que convertir un travail typique de démarrage à un système (voir Systemd pour les utilisateurs novices).

Vous pouvez exécuter plusieurs commandes à partir du même fichier de service, en utilisant plusieurs 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 complet. Si une commande échoue, le reste n'est pas exécuté. UNE - avant que le chemin n'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 au lieu. Cela devrait fonctionner avec les versions 16.04 et supérieures, mais pas les versions précédentes d'Ubuntu avec systemd (depuis celles qui utilisaient toujours Upstart pour les sessions utilisateur). Les unités de session utilisateur peuvent être contrôlées avec les mêmes commandes qu'avec les services système, mais avec --user option ajoutée:

systemctl --user daemon-reload
systemctl --user status foo.service

1Contrairement aux démons de longue durée.


53
2018-01-09 19:21



est-il possible de définir une priorité sur le travail? ou spécifiez que cela dépend d'un autre service à démarrer en premier? - r3wt
@ r3wt oui, il y a différentes façons de le faire. le WantedBy utilisé ici, par exemple, le fait démarrer lorsque le multi-user.target est atteint. Vous pouvez utiliser Before, After, Requires, etc. Voir man systemd.unit - muru
@PerlDuck pas la seule chose qui manquait. Merci! - muru
Vous êtes les bienvenus. - Btw, le RemainAfterExit dépend du service que vous démarrez et de son comportement souhaité. Par exemple, /bin/df -h <s> aurait </ s> devrait avoir RemainAfterExit=no. - PerlDuck
@PerlDuck Il n'y a rien d'inhérent dans df qui a besoin RemainAfterExit=no. À moins que vous ne souhaitiez exécuter la commande à plusieurs reprises à chaque exécution systemctl start foo. - muru


$HOME/.config/autostart
  • Cet emplacement contient la liste des applications de démarrage.
  • .desktop fichier peut être mis ici qui sera exécuté au démarrage.

Exemple d'exemple pour .desktop fichier:

En suivant .desktop déposer dans $HOME/.config/autostart et donné chmod +x:

[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 chemin d'accès à votre script.sh
(généralement recommandé de /usr/local/bin so-cela peut être exécuté par commande directe dire myscript remplacé par "</path/to/script>").

Exemple d'exemple de script.sh:

#!/bin/bash
<commands to be executed>
exit

Résultat: .desktop le fichier sera lancé à partir de $HOME/.config/autostart qui exécute le script par Exec=

Par conséquent, vous pouvez exécuter votre script shell désiré au démarrage!


22
2017-07-20 06:14





Pour des choses simples, vous pouvez ajouter une commande dans Système-> Préférences-> Sessions indiquant l'emplacement de votre script.

Sinon, vous pouvez l’ajouter à /etc/init.d/rc.local ou créer un parvenu travail si c'est un plus niveau faible des trucs.

Jeter un coup d'œil à https://help.ubuntu.com/community/UbuntuBootupHowto pour plus d'informations


18
2017-08-04 19:59





Tu devrais utiliser parvenu pour ça. Upstart est utilisé pour les processus Ubuntu qui sont automatiquement démarrés. C'est une solution améliorée comme les anciens scripts init.d de System-V. Il vous permet également de mettre en place des conditions préalables au début de votre script (c.-à-d. Avez-vous besoin que le réseau fonctionne? Etc.)


5
2017-08-04 19:58