Frage zu Shell Script

pom

Well-Known Member
Hallo,

ich habe hier ein Skript, das funktioniert wenn ich es auf der Konsole aufrufe

Code:
#/usr/bin/sh
val=`/usr/local/bin/mosquitto_sub -h eu1.cloud.thethings.network -p 1883 -u test@ttn -P xxx.yyy.zzz -t test/test@ttn/devices/test/up -C 1 | jq  .uplink_message.decoded_payload.temp`
echo -n PUTVAL '"/lorawan/temperature"' N:
echo $val

Wenn ich es im Kontext von collectd aufrufe scheint es nicht zu funktionieren.

Wenn collectd aktiv ist, laufen folgende Prozesse:
Code:
30597  -  I    0:00.33 temperature_lorawan.sh /home/pmueller/temperature_lorawan.sh (sh)
32510  -  I    0:00.00 temperature_lorawan.sh /home/pmueller/temperature_lorawan.sh (sh)
32699  -  S    0:00.01 /usr/local/bin/mosquitto_sub -h eu1.cloud.thethings.network -p 1883 -u test@ttn -P xxx.yyy.zzz
32881  -  I    0:00.02 jq .uplink_message.decoded_payload.temp

Wieso taucht das shell skript 2x auf? Ist das normal?
Was könnte das Problem sein?

Danke,
Peter
 

PMc

Well-Known Member
Das ist normal. Du hast da backticks drin, diese `` Dinger, und das heisst für die shell, starte eine neue shell und gib ihr das was dazwischen steht, zur Ausführung, und füge dann deren output anstelle ein und mach damit weiter. Und diese zweite shell führt dann die Malaria, also das mosquito aus - oder was immer das sein mag was Du da machst.
Wo dabei das Problem ist, weiß ich nicht - ich weiss aber auch nicht was collectd ist, und den Rest kenne ich gleich gar nicht.

Was man aber auch noch sehen kann: die erste shell hat schon was gearbeitet, 0.33 Sekunden, die zweite nicht - das ist auch logisch denn die braucht ja nur ein kommando aufrufen. Das mosquito selber hat auch ein klein bischen was getan, 0.01 sek. - und jetzt isses halt irgendwo in seinem Programmlauf, und ich hab ja keine Idee was das überhaupt ist oder tut.

Dass es gelegentlich Ärger gibt mit Hintergrundprozessen, das ist nicht schön aber normal. Prozesse können merken, ob sie ein kontrollierendes Terminal haben oder nicht (und manche warten dann auch einfach bis das Terminal vom Fischen zurückkommt). Stichworte dazu sind Prozessgruppe, Prozessgruppenführer <ähem>, Jobkontrolle, usw. - das ist keine ganz einfache Thematik.

Man kann solche Sachen natürlich auch sauber designen - dann sieht das am ende zB so aus (hier am Beispiel eines Web-Application-Servers in die FreeBSD rc.d Mechanik integriert). Das ist halt ein bischen Arbeit, und scheint sich im Zeitalter von Docker keiner besonderen Beliebtheit mehr zu erfreuen.
 

turrican

Well-Known Member
@pom: Ich schieß mal ins blaue - Userrechte?
Der collectd läuft unter anderem Userkontext als das Skript bei dir in der Konsole und deshalb gibts ggf Zugriffsprobleme?
 
Oben