web-dev-qa-db-fra.com

Script de démarrage au démarrage du système (Ubuntu 16.04.1)

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:

  • lancer crontab -e
  • ajouter @reboot /cronjobs/demo.sh >> /cronjobs/cronLogs/demo.output
  • définir l'autorisation d'exécution sur le script avec Sudo chmod +x /cronjobs/demo.sh
  • redémarrer le système

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:

  • lancer Sudo vi /etc/rc.local
  • ajouté /cronjobs/demo.sh || exit 1
  • redémarrer le système

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:

  • déplacez le script avec mv /cronjobs/demo.sh /etc/rc0.d/K99_demo.sh
  • vérifie les permissions (tout semble aller pour le mieux)
  • 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 ê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

2
devKyrios

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.

Modifier - Ajouter 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 mkdirname__.

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.

Edit 2 - Créer un chemin de répertoire complet en une seule commande

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 à mkdirde créer automatiquement tous les niveaux parent de répertoire s'ils n'existent pas.
  • -v (version longue --verbose) indique à mkdird’imprimer les noms de tous les répertoires créés.
0
WinEunuuchs2Unix