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

34

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

Le fichier /etc/rc.local entier:

#!/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 supposé ê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, 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

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

Similar questions < a href="https://askubuntu.com/q/239600/161623"> déjà , mais jusqu'à présent, je n'ai pas pu appliquer les informations à mon problème spécifique.

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

    
posée x-x 25.05.2013 - 08:52
la source

7 réponses

20

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

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

J'ai rencontré la même chose en définissant manuellement le gestionnaire cpu et en ne le faisant pas dans rc.local . Voici ma solution de contournement personnalisée, qui utilise update-rc.d pour exécuter vos commandes au démarrage:

  1. Créez un fichier myscript.sh dans le répertoire /etc/init.d avec un titre: #!/bin/sh
  2. Mettez vos commandes personnalisées en tant que contenu
  3. Rendez-le 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

En outre, vous pouvez vérifier les scripts /etc/network/if-up.d et voir si vous pouvez déclencher vos commandes au démarrage de la mise en réseau.

    
réponse donnée Drew 08.03.2014 - 20:09
la source
4

essayez sudo sysv-rc-conf et vérifiez si rc.local est activé

rc.local         [ ]   [x]   [x]   [x]   [x]   [ ]   [ ]   [ ]
    
réponse donnée zuba 25.05.2013 - 11:30
la source
2

Nous avons eu ce problème sur certains serveurs hébergés chargeant des règles FW.

Sur ces boîtes, elles redémarrent TRÈS rapidement et nous avons trouvé que mettre un "sleep 1" dans rc.local avant que les instructions de chargement ne semblent résoudre le problème. Je suppose que cela a donné un peu de temps aux interfaces pour régler avant de charger les règles FW.

    
réponse donnée Simon Hart 04.12.2014 - 13:27
la source
2

J'ai eu un problème similaire dans rc.local ne s'exécutant 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 "on" en entrant la commande suivante et en redémarrant:

sudo systemctl enable rc-local.service
  

privilège

bien que je n'ai pas testé sa solution, je pense que cela semble logique et fonctionnera. Cependant:

J'ai également trouvé une solution qui ajoute un script à ./.config/autostart-scripts/ qui fera l'affaire

    
réponse donnée Diet Bos 14.05.2016 - 21:34
la source
1

Une fois, j'ai édité rc.local avec Notepad dans Windows et cela a commencé à avoir ce problème.

Dans ce cas, l’utilisation d’un éditeur de texte prend en charge la conversion EOL, telle que Notepad ++, pour convertir le style EOL en "Unix", peut le résoudre.

Vous pouvez aussi le faire en :set ff=unix dans Vim.

    
réponse donnée SyaSyaNown 07.03.2016 - 18:15
la source
1

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

sudo chmod +x /etc/rc.local

Activez-le ensuite:

sudo systemctl enable rc-local.service

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

sudo systemctl start  rc-local.service

Le statut 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
    
réponse donnée leobocao 02.04.2018 - 15:48
la source
0

Vous devrez vous assurer que /etc/rc.local est exécuté lors du démarrage du serveur avec la commande:

sudo systemctl enable rc-local.service

    
réponse donnée William 17.11.2017 - 11:34
la source

Lire d'autres questions sur les étiquettes