3 votes

Commencez le script au démarrage du système (Ubuntu 16,04,1)

Sur mon nouveau système Ubuntu, j'ai essayé de démarrer automatiquement un script Bash au démarrage du système.

J'ai trouvé beaucoup de publications et de tutoriels à ce sujet. donc j'ai essayé de le faire via Crontab:

  • exécuter crontab -e
  • ajouter @reboot /cronjobs/demo.sh >> /cronjobs/cronLogs/demo.output
  • définir les permissions d'exécution du script avec sudo chmod +x /cronjobs/demo.sh
  • redémarrer le système

L'output a été créé, mais le script ne s'exécute pas. J'ai donc essayé une autre solution avec le fichier rc.local:

  • exécuter sudo vi /etc/rc.local
  • ajouter /cronjobs/demo.sh || exit 1
  • redémarrer le système

Mais mon script ne s'exécute pas. J'ai lu que pour que le script soit exécuté au démarrage, il doit être dans /etc/rc0.d/. Donc j'ai essayé ceci:

  • déplacer le script avec mv /cronjobs/demo.sh /etc/rc0.d/K99_demo.sh
  • vérifier les permissions (tout semble ok)
  • redémarrer le système

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 m'être déplacé dans le dossier avec cd /cronjobs . Le script est un fichier démo qui crée simplement un dossier:

#!/bin/sh
echo sortie de la démo
mkdir /cronjobs/demofolder

Modifié : Chemins et noms de fichiers remplacés; ajout du contenu complet du fichier demo.sh

0voto

WinEunuuchs2Unix Points 91128

La solution la plus simple consiste à utiliser les pouvoirs 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 entièrement et fonctionne pour tous les utilisateurs indépendamment du nom de leur répertoire personnel, c'est-à-dire /home/steve, /home/mary, etc.

Éditer - Ajouter sleep 10

Pour quelque raison que ce soit, cron fonctionne trop vite, ou le kernel 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.

Vous n'aurez peut-être pas besoin de 10 secondes entre les deux commandes de création de répertoires, mais 10 fonctionne sur mon système avec un SSD.

Éditer 2 - Créer le chemin complet du répertoire en une seule commande

Comme indiqué dans les commentaires ci-dessous, une méthode plus simple est d'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 de répertoire parents s'ils n'existent pas.
  • -v (version longue --verbose) indique à mkdir d'afficher les noms de tous les répertoires créés.

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