Question Comment exécuter un script au démarrage? [dupliquer]


Cette question a déjà une réponse ici:

J'ai un script dans un dossier:

/path/to/my/script.sh

J'ai besoin de ce script pour s'exécuter à chaque démarrage du système (même si personne ne se connecte au système). Que dois-je faire pour que cela se produise?


93
2017-12-12 14:40


origine




Réponses:


Vous aurez besoin des privilèges root pour tout ce qui suit. Pour obtenir root, ouvrez un terminal et exécutez la commande

sudo -i

et l'invite de commande changera pour "#" indiquant que la session de terminal a les privilèges root.

Alternative # 1: Ajouter des commandes à /etc/rc.local

vi /etc/rc.local

avec un contenu comme celui-ci:

# This script is executed at the end of each multiuser runlevel
/path/to/my/script.sh || exit 1   # Added by me
exit 0

Alternative n ° 2: Ajouter un travail de démarrage (pour les systèmes antérieurs à 15.04)

Créer /etc/init/myjob.conf

vi /etc/init/myjob.conf

avec un contenu comme le suivant

description     "my job"
start on startup
task
exec /path/to/my/script.sh

Option n ° 3: Ajouter un script d'initialisation (obsolète)

Créer un nouveau script dans /etc/init.d/myscript.

vi /etc/init.d/myscript

(Évidemment, cela n'a pas besoin d'être appelé "myscript".) Dans ce script, faites ce que vous voulez faire. Peut-être juste lancer le script que vous avez mentionné.

#!/bin/sh
/path/to/my/script.sh

Rendez-le exécutable.

chmod ugo+x /etc/init.d/myscript

Configurez le système d'initialisation pour exécuter ce script au démarrage.

update-rc.d myscript defaults

121
2017-12-12 15:07



Les gens ne devraient-ils pas utiliser le démarrage maintenant? - eduardocereto
Il est possible de faire la même chose en écrivant un court travail de démarrage. Les scripts d'initialisation sont toujours pris en charge, cependant, et sont faciles à utiliser. - jdthood
Il suffit d'ajouter la méthode Upstart-job en tant que troisième alternative. - jdthood
inittab est une autre méthode (mais peut-être plus pour les démons que pour les scripts). - Geremia
Ubuntu 16.04 utilise maintenant systemd. Selon askubuntu.com/questions/765120/… on peut utiliser sudo systemctl enable rc-local.service pour obtenir la compatibilité /etc/rc.local ou voir unix.stackexchange.com/questions/47695/… pour le script natif systemd (mais /etc/rc.local a l'avantage de beaucoup de simplicité). Peut-être ajouter "Alternative n ° 4. Ajouter un job systemd" ici? - djb


Vous n'avez pas besoin de root, ni même de vous connecter.

Vous pouvez éditer votre crontab (crontab -e) et créer une entrée comme celle-ci:

@reboot /path/to/script.sh

De cette façon, vous pouvez l'exécuter en tant qu'utilisateur régulier. @reboot Cela signifie simplement qu'il est lancé au démarrage de l'ordinateur (pas nécessairement au redémarrage).


45
2017-12-12 16:20



Pour que les jobs crone fonctionnent, l'utilisateur n'a-t-il pas besoin de se connecter? La question indique même si l'utilisateur ne se connecte pas. Dans ce cas, cette méthode fonctionnerait-elle toujours? - Dina
@Qwertylicious, non, l'utilisateur n'a pas besoin de se connecter pour exécuter des tâches cron. Cette méthode fonctionne, qu'il soit ou non connecté, car cron exécute un processus système et, lors de l'exécution des tâches cron de l'utilisateur, il exécute le travail en tant qu'utilisateur. Tant que l'ordinateur est allumé, cron s'exécutera, quel que soit l'utilisateur connecté. - Dan Jones


du terminal

  1. créer un fichier newshell.sh.desktop dans ~/.config/autostart dossier:

    gedit ~/.config/autostart/newshell.sh.desktop
    
  2. changement Exec, Name et Comment valeur et ajout au fichier: Première ligne

     [Desktop Entry]
     Type=Application
     Exec=/full/link/to/your/newshell.sh
     Name=newshell
     Comment=whatever you want
    
  3. enregistrer

ou

vous pouvez le faire à partir de l'interface graphique:

  1. exécuter l'outil "applications de démarrage" dans Ubuntu 14.04 il vous suffit de l'écrire dans la zone de recherche.
  2. ajouter le même Exec, Name et Comment.

11
2017-09-16 14:31



Je sais que c'est un peu tard, mais merci pour l'aide.
Veuillez noter que l'OP voulait explicitement le démarrer au démarrage du système avant que quiconque ne s'y connecte. Les scripts à démarrage automatique sont exécutés uniquement lors de la connexion. - Gunnar Hjalmarsson


Dans votre maison, vous avez un fichier nommé .bashrc. Ce fichier est exécuté à l'ouverture de votre session.

Il suffit de mettre quelque chose comme ceci à la fin du fichier:

sh /path/to/your/script.sh

EDIT: désolé, je n'ai pas répondu à votre question car ma solution est exécutée lorsqu'un utilisateur est connecté ...

Pour exécuter quelque chose avant la connexion, vous pouvez essayer rcconf ou rc-file: http://www.debianadmin.com/manage-linux-init-or-startup-scripts.html


2
2017-12-12 14:47



.bashrc est appelé lorsqu'un nouveau terminal est ouvert. - termnml
Merci pour l'info. Le site Web que vous avez mentionné a de bonnes informations! - Rusty


Editez simplement rc.local nano /etc/init.d/rc.local comme suit:

/path/to/my/script.sh || exit 1 
exit 0

-1
2017-08-25 22:43