132 votes

Comment exécuter un script au démarrage ?

J'ai un script dans un dossier :

/path/to/my/script.sh

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

156voto

jdthood Points 11817

Vous aurez besoin des privilèges de root pour l'un des éléments suivants. Pour obtenir les privilèges root, ouvrez un terminal et exécutez la commande

sudo -i

et l'invite de commande se transforme en '#', indiquant que la session du terminal dispose des privilèges de l'utilisateur root.

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

vi /etc/rc.local

avec un contenu comme le suivant :

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

Alternative #2 : Ajouter une tâche Upstart (pour les systèmes plus anciens que 15.04) (non recommandé)

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

Déclaration officielle de site web de démarrage -> "Le projet est en mode maintenance uniquement. Aucune nouvelle fonctionnalité n'est développée et le conseil général serait de passer à un autre système d'init minimal ou à systemd."

Alternative #3 : Ajouter un init script (obsolète)

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

vi /etc/init.d/myscript

(Évidemment, il n'est pas nécessaire de l'appeler "myscript".) Dans ce script, faites ce que vous voulez faire. Peut-être simplement exécuter le script que vous avez mentionné.

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

Rendez-le exécutable.

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

Configurer le système init pour exécuter ce script au démarrage.

update-rc.d myscript defaults

66voto

Dan Jones Points 1049

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

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

@reboot /path/to/script.sh

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

P.S. : Concernant les commentaires sur le fait que cela ne fonctionne pas correctement.

Certains ont dit que cela ne fonctionne pas sur les distros basées sur Debian, comme Ubuntu. J'ai personnellement utilisé cette méthode avec succès sur Ubuntu et Mint. Il y a cependant quelques points à prendre en compte.

El @reboot Les travaux seront exécutés lorsque le démon cron démarrera. J'ai constaté que sur les distributions basées sur Debian, cela peut se produire avant que le fichier /home a été montée. Si le script que vous exécutez est dans votre dossier personnel, il échouera.

De plus, cela n'est pas limité aux distributions basées sur Debian, mais si votre dossier personnel est crypté, il peut ne pas être décrypté avant votre connexion. Il n'y a probablement aucun moyen de contourner ce problème.

De plus, votre interface réseau n'est peut-être pas encore opérationnelle et si la commande nécessite un accès à Internet, elle peut échouer.

Enfin, encore une fois, ceci n'est pas limité aux distros basées sur Debian, mais cron fonctionne sous un environnement beaucoup plus limité que celui de votre Shell. En particulier, le PATH La variable a beaucoup moins de chemins. Il est possible que la commande en cours d'exécution ne soit pas trouvée, si elle se trouve, par exemple, dans quelque chose comme $HOME/.local/bin qui peut se trouver dans votre PATH dans votre Shell session, mais pas sous cron . Il est même possible que la commande exécutée dépende d'une variable d'environnement qui n'est pas définie dans le fichier cron .

Donc, il y a un certain nombre de raisons pour lesquelles votre commande sera exécutée sous cron, mais ce n'est pas parce que @reboot ne fonctionne pas sur votre distro.

14voto

ChaosPredictor Points 464

Du terminal

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

    gedit ~/.config/autostart/newshell.sh.desktop
  2. changement Exec , Name y Comment valeur et ajouter au dossier : première ligne

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

o

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

  1. Exécuter l'outil "startup applications" dans Ubuntu 14.04, il suffit de l'écrire dans la boîte de recherche.
  2. ajouter le même Exec , Name y Comment .

1voto

Gp2mv3 Points 1716

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 ça à 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

1voto

Arcsector Points 121

Il suffit d'éditer rc.local nano /etc/init.d/rc.local comme suit :

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

SistemesEz.com

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.

Powered by:

X