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 ?
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 ?
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.
/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
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."
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
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.
Du terminal
créer un fichier newshell.sh.desktop
en ~/.config/autostart
dossier :
gedit ~/.config/autostart/newshell.sh.desktop
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
sauver
o
vous pouvez le faire à partir de l'interface graphique :
Exec
, Name
y Comment
.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
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.