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
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
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
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).
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 :
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.
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…
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