Vraag


Acties:
  • 0 Henk 'm!

  • rvdgaag
  • Registratie: December 2015
  • Laatst online: 12:49
Even een noob vraag:

ik moet een raspberri Pi4 laten draaien met raspian en so far so good, maar de executable applicatie die bij opstarten moet starten krijg ik niet aan de gang, wel als ik hem via de GUI of terminal sessie start.

Zo ziet de rc.local er uit, wat doe ik verkeerd ?

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

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

cd /home/rvdgaag/mqtt
sudo ./digitalstrom-mqtt &

exit 0

Deye 12kW Hybrid, 8,77 kW peak solar, 62,4 kWH Seplos batteries, Panasonic K-series 5kW all-electric heatpump

Beste antwoord (via rvdgaag op 12-07-2023 19:39)


  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Ah, juist, als je in de map had gekeken, had je kunnen zien dat het .service zou moeten zijn. En je moet eerst de daemon-reload uitvoeren, anders blijft 'ie dat zeggen (en aangeven dat er een wijziging op disk is die gelezen moet worden).

Je foutmelding zegt trouwens ook welke extentie het moet hebben. ;)

[ Voor 12% gewijzigd door Hero of Time op 12-07-2023 19:31 ]

Commandline FTW | Tweakt met mate

Alle reacties


Acties:
  • +1 Henk 'm!

  • Thy...
  • Registratie: April 2006
  • Laatst online: 11:58
cd werkt niet in rc.local, je zal daar als commande het hele pad moeten invoeren.

Probeer ipv

code:
1
2
cd /home/rvdgaag/mqtt
sudo ./digitalstrom-mqtt &


eens

code:
1
sudo /home/rvdgaag/mqtt/digitalstrom-mqtt &


Op die manier is je command het hele pad naar je programma.

[ Voor 13% gewijzigd door Thy... op 12-07-2023 14:46 ]


Acties:
  • +1 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Over het algemeen heeft software die je wilt draaien documentatie om het te installeren en automatisch te laten starten met het systeem.

Tegenwoordig is het gebruik van rc.local afgeraden en is het verstandiger om een systemd unit te maken. Aan de ene kant klinkt het erg uitdagend, aan de andere kant is het ook best simpel. Ook het gebruik van sudo is onnodig als je iets via rc.local of met systemd wilt starten. Die worden namelijk al met root rechten uitgevoerd of je geeft de gebruiker op onder wie het gestart wordt en worden de rechten gedropped zodra het is gestart.

Iets als dit zou al voldoende moeten zijn, m'n Domoticz heb ik zo goed mogelijk aangepast naar jouw situatie.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Digitalstrom MQTT

[Service]
Type=simple
#User=root # of aanpassen naar aparte user
#Group=root #of aanpassen naar aparte groep
ExecStart=/home/rvdgaag/mqtt/digitalstrom-mqtt
WorkingDirectory=/home/rvdgaag/mqtt
Restart=on-failure
RestartSec=1m
#StandardOutput=null

[Install]
WantedBy=multi-user.target

Opslaan in /etc/systemd/system, daarna het volgende uitvoeren:
code:
1
2
sudo systemctl daemon-reload
sudo systemctl enable --now digitalstrom-mqtt

Waarbij 'digitalstrom-mqtt' staat voor onder welke naam je het bestand hebt opgeslagen.

Ik heb de gebruiker en groep in comment gezet, dan default het naar root, maar wellicht valt het hierover en moet het gezet zijn. Merk je snel genoeg.

[ Voor 5% gewijzigd door Hero of Time op 12-07-2023 18:44 ]

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • rvdgaag
  • Registratie: December 2015
  • Laatst online: 12:49
Hero of Time schreef op woensdag 12 juli 2023 @ 18:43:
Over het algemeen heeft software die je wilt draaien documentatie om het te installeren en automatisch te laten starten met het systeem.

Tegenwoordig is het gebruik van rc.local afgeraden en is het verstandiger om een systemd unit te maken. Aan de ene kant klinkt het erg uitdagend, aan de andere kant is het ook best simpel. Ook het gebruik van sudo is onnodig als je iets via rc.local of met systemd wilt starten. Die worden namelijk al met root rechten uitgevoerd of je geeft de gebruiker op onder wie het gestart wordt en worden de rechten gedropped zodra het is gestart.

Iets als dit zou al voldoende moeten zijn, m'n Domoticz heb ik zo goed mogelijk aangepast naar jouw situatie.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Digitalstrom MQTT

[Service]
Type=simple
#User=root # of aanpassen naar aparte user
#Group=root #of aanpassen naar aparte groep
ExecStart=/home/rvdgaag/mqtt/digitalstrom-mqtt
WorkingDirectory=/home/rvdgaag/mqtt
Restart=on-failure
RestartSec=1m
#StandardOutput=null

[Install]
WantedBy=multi-user.target

Opslaan in /etc/systemd/system, daarna het volgende uitvoeren:
code:
1
2
sudo systemctl daemon-reload
sudo systemctl enable --now digitalstrom-mqtt

Waarbij 'digitalstrom-mqtt' staat voor onder welke naam je het bestand hebt opgeslagen.

Ik heb de gebruiker en groep in comment gezet, dan default het naar root, maar wellicht valt het hierover en moet het gezet zijn. Merk je snel genoeg.
Welke extensie heeft die file nodig dan, ik heb hem dsmqtt genoemd maar krijg de volgende foutmelding:

root@raspberrypi:/etc/systemd# sudo systemctl enable --now dsmqtt
Failed to enable unit: Unit file dsmqtt.service does not exist.
root@raspberrypi:/etc/systemd#

Deye 12kW Hybrid, 8,77 kW peak solar, 62,4 kWH Seplos batteries, Panasonic K-series 5kW all-electric heatpump


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Ah, juist, als je in de map had gekeken, had je kunnen zien dat het .service zou moeten zijn. En je moet eerst de daemon-reload uitvoeren, anders blijft 'ie dat zeggen (en aangeven dat er een wijziging op disk is die gelezen moet worden).

Je foutmelding zegt trouwens ook welke extentie het moet hebben. ;)

[ Voor 12% gewijzigd door Hero of Time op 12-07-2023 19:31 ]

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • rvdgaag
  • Registratie: December 2015
  • Laatst online: 12:49
Thanks, lijkt het nu wel te doen nadat ik de .service file in /etc/systemd/system had gezet

Deye 12kW Hybrid, 8,77 kW peak solar, 62,4 kWH Seplos batteries, Panasonic K-series 5kW all-electric heatpump


Acties:
  • 0 Henk 'm!

  • deHakkelaar
  • Registratie: Februari 2015
  • Laatst online: 27-07-2024
Houd er rekening mee dat hostname -I meerdere IP's kan weergeven als een systeem er meerdere heeft:
$ man hostname
[..]
       -I, --all-ip-addresses
              Display all network addresses of the host. This option enu‐
              merates all configured addresses on all network interfaces.
              The  loopback  interface  and IPv6 link-local addresses are
              omitted. Contrary to option -i, this option does not depend
              on  name  resolution. Do not make any assumptions about the
              order of the output.

$ hostname -I
10.0.0.3 192.168.0.6


EDIT: Een simpele xargs bied mogelijk daar een oplossing:
$ hostname -I | xargs -n 1
10.0.0.3
192.168.0.6

$ hostname -I | xargs -n 1 echo "My IP address is"
My IP address is 10.0.0.3
My IP address is 192.168.0.6

[ Voor 15% gewijzigd door deHakkelaar op 13-07-2023 01:45 ]

There are only 10 types of people in the world: those who understand binary, and those who don't

Pagina: 1