rc.local bloque systemd

Le système préconisé par la Fondation Raspberry Pi

Modérateurs : Francois, maxty01

Répondre
knasson
Messages : 6
Enregistré le : sam. 9 avr. 2022 19:07

rc.local bloque systemd

Message par knasson » lun. 10 juin 2024 19:27

bonjour,

j'ai une commande a lancer periodiquement , comme elle comporte un pipe CRON ne l'accepte pas donc j'utilise la commande suivante:

watch -n 5 "/home/kan/AlsavoCtrl/build/AlsavoCtrl -s 824500039214 -l 8608 -a 192.168.1.66 -p 1194 | python3 /home/kan/AlsavoCtrl/build/mqpublish.py "

cette commande devrait demarrer au boot.
elle comporte une sortie texte de quelques lignes (debuggage)
elle fonctionne dans une console mais elle ne me rend pas la main.
Alors j'ai essayé de mettre cette commande dans rc.local et là ca marche...MAIS je perds la fonctionnalité d'un service que j'ai créé et mis dans systemd.
Comme j'ai besoin de ce service je ne peux pas utiliser la commande dans rc.local alors j'ai essayer de créé un script .sh avec cette commande pour lancer un service dans systemd
et là pas moyen de démarrer le script.Voici le script avec les droits d'execution OK.

#/bin/bash
watch -n 5 "/home/kan/AlsavoCtrl/build/AlsavoCtrl -s 824500039214 -l 8608 -a 192.168.1.66 -p 1194 | python3 /home/kan/AlsavoCtrl/build/mqpublish.py "

je cherche le moyen de demarrer cette commande au boot du pi.
quelq'un peut il m'aider?
je suis sous bullseye et c'est un pi4

piper
Modérateur
Messages : 729
Enregistré le : sam. 5 juin 2021 18:57

Re: rc.local bloque systemd

Message par piper » mar. 11 juin 2024 02:22

Vous dites "pas moyen de démarrer le script" avec systemd
Qu'avez vous mis dans votre fichier de déclaration du service ?
que dit "sudo systemctl status nomdevotreservice" ?
ou "sudo journalctl -u nomdevotreservice" ?

Un exemple de fichier de config de service qui pourrait fonctionner (à adapter si besoin)

[Unit]
Description=nomdevotreservice
After=rc-local.service
[Service]
Type=simple
User=root #user à utiliser, pas forcément root, ça dépend
ExecStart=chemincompletduscriptàlancer
ExecStop=
PIDFile=cheminduficehierdepid
[Install]
WantedBy=multi-user.target
3 Pi5 : Emby / Samba , Librelec, Android TV
3 Pi4 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi3 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

dyox
Raspinaute
Messages : 976
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: rc.local bloque systemd

Message par dyox » mar. 11 juin 2024 07:18

Bonjour,

Il manque un "!" dans le script, c'est #!/bin/bash ou #!/usr/bin/env bash

1. Qu'elle était la commande dans le cron pour que cela ne fonctionne pas ?

2. D'ailleurs, c'était quel cron ? le user, le root ou le fichier /etc/crontab ?

3. Avez-vous essayé ce script dans le cron ?

4. Que donne cette ligne dans le /etc/crontab avec le script corrigé :
@reboot root chemincompletduscriptàlancer

5. il me semble qu'il faut mettre "&" en fin de ligne de commande pour le mettre en arrière plan. Cela rendra peut-etre la main.

knasson
Messages : 6
Enregistré le : sam. 9 avr. 2022 19:07

Re: rc.local bloque systemd

Message par knasson » mar. 11 juin 2024 09:12

@dyox @piper

bien vu pour le "!" mais ca n'a pas resolu le probleme du demarrage du service
voici le fichier alsavo.service qui se trouve dans /etc/systemd/system

[Unit]
Description= PublicationDataPAC
After= rc-local.service

[Service]
Type=simple
ExecStart=/bin/bash /home/kan/AlsavoCtrl/build/pubAlsavo.sh &
Restart=on-failure
TimeoutStopSec=1
User=root

[Install]
WantedBy=multi-user.target

ce que donne systemctl status alsavo.service ---->

root@raspberrypi:/home/kan# systemctl status alsavo.service
● alsavo.service - PublicationDataPAC
Loaded: loaded (/etc/systemd/system/alsavo.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2024-06-11 09:00:03 CEST; 10s ago
Process: 11223 ExecStart=/bin/bash /home/kan/AlsavoCtrl/build/pubAlsavo.sh & (code=exited, status=1/FAILURE)
Main PID: 11223 (code=exited, status=1/FAILURE)
CPU: 9ms

Jun 11 09:00:03 raspberrypi systemd[1]: alsavo.service: Scheduled restart job, restart counter is at 5.
Jun 11 09:00:03 raspberrypi systemd[1]: Stopped PublicationDataPAC.
Jun 11 09:00:03 raspberrypi systemd[1]: alsavo.service: Start request repeated too quickly.
Jun 11 09:00:03 raspberrypi systemd[1]: alsavo.service: Failed with result 'exit-code'.
Jun 11 09:00:03 raspberrypi systemd[1]: Failed to start PublicationDataPAC.

ce qu'il y a dans le script pubAlsavo.sh

#!/bin/bash
watch -n 5 "/home/kan/AlsavoCtrl/build/AlsavoCtrl -s 824500039214 -l 8608 -a 192.168.1.66 -p 1194 | python3 /home/kan/AlsavoCtrl/build/mqpublish.py "

j'ai recommencé la manip ce matin si je mets la commande "watch" dans rc.local ca démarre tres bien au boot MAIS j'ai un service de systemd qui ne fonctionne plus.
((il s'agit de teleinfo.service qui demarre un script python de communication avec le linky.)
si je tue le process "watch" avec kill -9 ca me rend la main sur teleinfo.service.J'avoue que la ca me depasse.

L'essai avec CRON ne donne rien de toute facon je suis limité a 1 minute et je veux etre en dessous. le & en fin de commande ne donne rien

dyox
Raspinaute
Messages : 976
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: rc.local bloque systemd

Message par dyox » mar. 11 juin 2024 13:52

On va essayer de ruser : on va mettre le script dans /etc/crondaily
Pour cela, le script dans avoir les mêmes droits, user et group que les autres script déjà présents, faites un ll ou ls -alF. Et être exécutable.
Un petit man cron pour la compréhension.

Et mettre dans /etc/crontab
@reboot * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Après çà, je n'ai pas d'autres idées.

Analysez aussi les logs genre :
journalctl | grep -w cron

Ha aussi ! Dans les cron, les chemins dans être absolu dans pas "python3" mais "/usr/bin/python3"

knasson
Messages : 6
Enregistré le : sam. 9 avr. 2022 19:07

Re: rc.local bloque systemd

Message par knasson » mar. 11 juin 2024 16:50

voila ce que cron me repond: lorsque je mets la commande :@reboot * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
crontab: installing new crontab
"/tmp/crontab.8iJWWn/crontab":30: bad command
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)

dyox
Raspinaute
Messages : 976
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: rc.local bloque systemd

Message par dyox » mar. 11 juin 2024 18:57

C'est normal, une erreur de ma part, c'est
@reboot root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

Répondre

Retourner vers « Raspbian »