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
rc.local bloque systemd
Modérateurs : Francois, maxty01
Re: rc.local bloque systemd
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
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
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
-
- 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
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.
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.


Re: rc.local bloque systemd
@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
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
-
- 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
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"
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"


Re: rc.local bloque systemd
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)
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)
-
- 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
C'est normal, une erreur de ma part, c'est
@reboot root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
@reboot root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

