Sur mon nouveau système Ubuntu, j'ai essayé de démarrer un script Bash automatiquement au démarrage du système.
J'ai trouvé de nombreux articles et des explications à ce sujet. alors j'ai essayé de le faire via Crontab:
crontab -e
@reboot /cronjobs/demo.sh >> /cronjobs/cronLogs/demo.output
Sudo chmod +x /cronjobs/demo.sh
La sortie a été créée, mais le script ne sera pas exécuté. J'ai donc essayé une autre solution avec le fichier rc.local
:
Sudo vi /etc/rc.local
/cronjobs/demo.sh || exit 1
Mais mon script ne fonctionne pas. J'ai donc lu que pour redémarrer, le script doit être en /etc/rc0.d/
. Alors j'ai essayé ceci:
mv /cronjobs/demo.sh /etc/rc0.d/K99_demo.sh
Même chose - le script ne sera pas exécuté.
Alors, quelle est mon erreur? Pourquoi mon script ne peut pas être exécuté? Je peux exécuter mon script si je lance ./demo.sh
après être passé dans le dossier avec cd /cronjobs
. Le script est un fichier de démonstration qui crée simplement un dossier:
#!/bin/sh écho de la sortie de démonstration mkdir /cronjobs/demofolder
Edité: chemins d'accès et noms de fichiers remplacés; ajout du contenu complet du fichier demo.sh
La solution la plus simple consiste à utiliser les pouvoirs de Sudo pour créer un fichier comme celui-ci dans /etc/cron.d/
:
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root mkdir /cronjobs
@reboot root sleep 10
@reboot root mkdir /cronjobs/demofolder
Cela évite l’utilisation d’un fichier de script et s’adresse à tous les utilisateurs, quel que soit le nom de leur répertoire d’accueil, à savoir/home/steve,/home/mary, etc.
sleep 10
Pour une raison quelconque, cron fonctionne trop rapidement ou le noyau fonctionne trop lentement lors de la création de répertoires. Une ligne supplémentaire sleep 10
était nécessaire entre les deux lignes mkdir
name__.
Vous n'aurez peut-être pas besoin de 10 secondes entre les deux commandes make directory, mais 10 fonctionnera sur mon système avec un SSD.
Selon les commentaires ci-dessous, une méthode plus simple consiste à utiliser:
Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root mkdir -p -v /cronjobs/demofolder
-p
(version longue --parents
) indique à mkdir
de créer automatiquement tous les niveaux parent de répertoire s'ils n'existent pas.-v
(version longue --verbose
) indique à mkdir
d’imprimer les noms de tous les répertoires créés.