Etc/rc.local qui ne se lance pas

Tags: #<Tag:0x00007f63f2bc5fe0>

Bonjour,

Mon fichier rc.local est comme ceci :

#!/bin/sh -e
#rc.local
MonScript
exit 0

Depuis le terminal, j’arrive à exécuter /etc/rc.local en utilisateur non-root, et mon script se lance correctement.
MonScript est bien dans le dossier /bin et j’ai bien pensé à exécuter

chmod +x /etc/rc.local

Mais rien ne se passe au démarrage… :hushed:

Quelques pistes de recherche ?

Tu utilise systemd sur ton système ? si oui essai de mettre ne place un fichier .unit afin que systemd l’exécute pour toi.
Attention dans ce cas à bien renseigner les dépendances si il doit s’exécuter à un moment précis.

Comme ceci :slight_smile:

Créer un fichier test.service, à mettre dans /etc/systemd/system/

[Unit]
Description=Service de test
After=tlp-init.service

[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/local/bin/test.sh

[Install]
WantedBy=multi-user.target
  • Démarrer le service test

    systemctl start test.service

  • Activer le service test au démarrage

    systemctl enable startup.service

Il y a déjà des services inclus dans systemd qui lancent rc.local :

gogi@blabla:~$ systemctl list-unit-files | grep rc
rc-local.service                           static   
rc.local.service                           static   

Il faudrait peut-être d’abord voir du côté du status et des logs ce que ça donne :

# systemctl status rc-local
# systemctl status rc-local

et

# journalctl -u rc-local
# journalctl -u rc.local

Merci pour vos réponses !
Je n’utilise pas systemd en tout cas pas dans mon programme principale… mais peut-être qu’une librairie l’utilise derrière (il y a libmodbus pour le dialogue avec le port COM et libmysqlclient-dev pour le dialogue avec la base de données).

rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/etc/systemd/system/rc-local.service; static)
Active: Failed (Result: exit-code) …
Process: 509 ExecStart=/etc/rc.local start (code=exited, status=134)

Mais sans l’appel de mon script le résultat est ok…
J’ai essayé en rajoutant un touch /tmp/toto dans rc.local mais rien n’est créer dans /tmp/.

Cela me renvoie “No journal files were found.”

Ah bon? Dans quel programme principal?

Mon script viens d’un code en c++ programmé avec code::blocks. J’ai compilé ce code avec gnu gcc et trouvé un exécutable dans un dossier /bin/release.
En fait j’ai qu’un seul programme “main.cpp” mais il fait appel à plusieurs librairies.
Je n’ai pas encore touché à systemd, et je ne sais pas encore comment l’utiliser…

Ce que je voulais te faire comprendre c’est que systemd n’a rien à avoir avec ton programme, c’est l’init par défaut maintenant sur Debian. Pour le vérifier il te suffit de regarder le retour de la commande suivante :

$ ls -l /sbin/init

Si tu as un retour comme suit :

gogi@blabla:~$ ls -l /sbin/init
lrwxrwxrwx 1 root root 20 févr.  1 22:45 /sbin/init -> /lib/systemd/systemd

Alors tu as bien systemd comme système d’init.

Ensuite :

Je ne suis pas sûr de comprendre là? Tu as fais un script ou un exécutable que tu as compilé avec gcc?
Et comment as-tu “trouvé” cet executable dans /bin/release : soit tu l’y a place toi-même, soit tu as construit un paquet .deb qui l’y a installé, en tous cas il s’est pas installé tout seul (à moins que je loupe qqch)?
En ce qui concerne les librairies as-tu vérifié que justement toutes les dépendances (librairies donc) soient installées?

Enfin ce serait bien aussi que tu nous montres ton script et/ou que tu nous précises si dans le fichier /etc/rc.local tu y colles le script ou bien le chemin vers l’executable?

D’accord, alors j’ai donc bien systemd comme système d’init.

Je me suis embrouillé dans les termes, c’est bien un exécutable et non un script que je souhaite lancer au démarrage.

Désolé je parlais de /bin/Release dans le dossier MonProjet de code::blocks.
Donc mon exécutable est dans : /home/MyUser/MonProjet/bin/Release/MonProjet
C’est bien ce chemin qui est renseigné dans rc.local.

Là non plus je suis pas sûr de comprendre? Enfin je veux être sûr d’avoir bien compris : tu as mis ton executable dans /bin ou dans /home/user/projet/bin…

Sinon lorsque tu lances ton script manuellement tout se passe bien, le problème ne se pose qu’au démarrage.
Donnes-nous le contenu de ton fichier /etc/rc.local également.

Mon exécutable est dans /home/MyUser/MyProjet/bin/Release.
/etc/rc.local est comme ceci :

#!/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 succes 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.

/home/MyUser/MyProjet/bin/Release/MyProject

exit 0

Lorsque je lance rc.local manuellement mon programme est bien exécuté.

Ton /home il serait pas sur une partition séparée par hasard?

Non je ne pense pas, parce que lorsque je fais sudo fdisk -l :

Disque /dev/mmcblk0 : 27,5 GiB, 29527900160 octets, 57671680 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x5edf5d47

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *        2048 55230463 55228416 26,3G 83 Linux
/dev/mmcblk0p2      55232510 57669631  2437122  1,2G  5 Extended
/dev/mmcblk0p5      55232512 57669631  2437120  1,2G 82 Linux swap / Solaris

Disque /dev/mmcblk0boot1 : 8 MiB, 8388608 octets, 16384 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Disque /dev/mmcblk0boot0 : 8 MiB, 8388608 octets, 16384 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Donnes le retour de :

# blkid

# mount

Et voici :

/dev/mmcblk0: PTUUID="5edf5d47" PTTYPE="dos"
/dev/mmcblk0p1: UUID="4fe921f3-0ee4-4eae-b6c2-296caf1920d9" TYPE="ext4" PARTUUID="5edf5d47-01"
/dev/mmcblk0p5: UUID="b6b9050a-f2f1-4c4a-a42c-d13f39094349" TYPE="swap" PARTUUID="5edf5d47-05"
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=491557,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=789888k,mode=755)
/dev/mmcblk0p1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=22,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=394944k,mode=700,uid=1000,gid=1000)

Par contre je ne sais pas du tout ce que ça signifie…

Bonjour,
Merci pour votre aide,
Mais j’ai beau chercher, je ne trouve toujours pas pourquoi le rc.local ne se lance pas au démarrage…

Désolé j’ai zappé ta question depuis…
Bon peux-tu nous donner le retour des commandes suivantes :

# systemctl list-unit-files | grep rc.local

Pas de soucis :relieved:

Cela me donne :
rc-local.service static rc.local.service static

Bon comme l’a dit @Clochette plus haut, il serait plus judicieux de créer un service pour ton programme plutôt que de passer par rc-local.

Si tu tiens quand même à passer par rc-local, il me faudrait le retour de :

# systemctl cat rc-local

afin de vérifier quelque chose.

Je préfère finir en essayant avec rc.local, et en cas d’impasse je créerai un service…

Voici le retour :

 # /lib/systemd/system/rc-local.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
SysVStartPriority=99

salut tous

j’ai inhaler le script de homebridge de Fibarohc2 qui fonctionne très bien,
mai je n’arrive pas a démarrée le ,scipte au démarrage du raspberry 3.

quand je tape : pi@raspberrypi:~ $ ps -p 1

PID TTY TIME CMD
1 ? 00:01:05 systemd

et
pi@raspberrypi:~ $ sudo systemctl status rc-local

Warning: rc-local.service changed on disk. Run ‘systemctl daemon-reload’ to relo
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset:
Drop-In: /lib/systemd/system/rc-local.service.d
└─debian.conf
/etc/systemd/system/rc-local.service.d
└─ttyoutput.conf
Active: failed (Result: exit-code) since Sun 2019-04-07 20:33:57 CEST; 16h ag
Process: 370 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE)

Warning: Journal has been rotated since unit was started. Log output is incomple
lines 1-11/11 (END)

avez une idée de comment démarrée le homebridge au démarrage du raspberry ?
merci d’avance