45 votes

Pourquoi la commande dans /etc/rc.local n'est-elle pas exécutée au démarrage ?

J'ai une seule commande dans mon /etc/rc.local script qui est censé démarrer le démon de mise à jour pour Tiny Tiny RSS pendant le démarrage, mais le script n'est pas exécuté pendant le démarrage. Pourquoi ?

L'ensemble du fichier /etc/rc.local :

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet

exit 0

/etc/rc.local est exécutable :

# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local

/etc/init.d/rc.local existe et est exécutable :

# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27  2012 /etc/init.d/rc.local

/etc/init.d/rc.local est censé être exécuté au démarrage pour ce niveau d'exécution :

# runlevel 
N 2
# ls -l /etc/rc2.d/S99rc.local 
lrwxrwxrwx 1 root root 18 Sep 22  2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local

Si j'appelle manuellement /etc/rc.local depuis la ligne de commande, le update_daemon se charge...

# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ?        S      0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet

... ce que je dois me rappeler de faire à chaque redémarrage de mon serveur jusqu'à ce que ce problème soit résolu.

Semblable questions déjà existent, mais jusqu'à présent, je n'ai pas pu appliquer les informations qu'ils contiennent à mon problème spécifique.

Pourquoi la commande dans rc.local n'est-elle pas exécutée au démarrage ?

25voto

My House Points 141

rc.local script se termine si une erreur survient lors de l'exécution de l'une de ses commandes (mentionnez l'option -e drapeau en #!/bin/sh -e ).

Il est possible que certaines conditions préalables ne soient pas remplies lorsque vous essayez d'exécuter vos commandes dans les cas suivants rc.local a lieu, de sorte que l'exécution de votre commande échoue.

J'ai rencontré la même chose en réglant manuellement le gouverneur de processeur et en échouant à le faire en rc.local . Voici ma solution de contournement personnalisée, qui utilise update-rc.d pour que vos commandes soient exécutées au démarrage :

  1. Créer un fichier myscript.sh dans le répertoire /etc/init.d avec un titre : #!/bin/sh
  2. Placez vos commandes personnalisées dans le contenu
  3. Le rendre exécutable : sudo chmod +x /etc/init.d/myscript.sh
  4. Créez des liens symboliques pour votre script pour différents niveaux d'exécution : sudo update-rc.d myscript.sh defaults

Vous pouvez également vérifier /etc/network/if-up.d scripts et voir si vous pouvez déclencher vos commandes au démarrage du réseau.

14voto

leobocao Points 141

Assurez-vous que le script de rc.local est exécutable :

sudo chmod +x /etc/rc.local

Ensuite, il faut l'activer :

sudo systemctl enable rc-local.service

Redémarrez le système ou lancez le script manuellement en exécutant :

sudo systemctl start  rc-local.service

L'état du service peut être affiché en exécutant :

$ sudo systemctl status rc-local.service
 rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) 
Drop-In: /lib/systemd/system/rc-local.service.d
           debian.conf
   Active: active (running) since Mon 2018-04-02 10:39:44 -03; 1s ago
  Process: 2044 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 2049 (svscanboot)
Tasks: 3
 Memory: 556.0K
CPU: 10ms
CGroup: /system.slice/rc-local.service

8voto

Thronghar Points 141

J'ai eu un problème similaire avec rc.local qui ne s'exécute pas au démarrage.

sshades m'a fourni la réponse suivante :

Ubuntu utilise maintenant systemd, et rc.local est maintenant considéré comme un service qui est désactivé par défaut. Vous pouvez activer rc.local en entrant la commande suivante et en redémarrant :

sudo systemctl enable rc-local.service

https://askubuntu.com/a/770033/395498

Bien que je n'aie pas testé sa solution, je pense qu'elle semble logique et qu'elle fonctionnera. Cependant :

J'ai également trouvé une solution qui consiste à ajouter un script à ./.config/autostart-script/.

5voto

zuba Points 2253

Essayer sudo sysv-rc-conf et vérifier si rc.local est activée

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]

5voto

Simon Hart Points 51

Nous avons rencontré ce problème sur certains serveurs hébergés lors du chargement des règles FW.

Sur ces machines, le redémarrage est TRÈS rapide et nous avons constaté que l'ajout d'un "sleep 1" dans rc.local avant les instructions de chargement semble résoudre le problème. Je suppose que cela donne un peu de temps aux interfaces pour s'installer avant de charger les règles FW.

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