ich habe ein Problem, dass ein Programm normal in der Shell die gewünschte Ausgabe erzeugt, über xinetd aber nicht funktioniert. Ich habe das Problem heruntergebrochen darauf, dass es das awk-Script ist, was einfach keine Ausgabe erzeugt.
Hier ist der relevante Script-Ausschnitt:
Code: Alles auswählen
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
# smartctl output of this special nvme ssd - relevant line
#
# === START OF SMART DATA SECTION ===
# ...
# Data Units Written: 1.867.600 [956 GB]
# ...
export DEVICE=/dev/nvme0n1
export DATA="$(/usr/sbin/smartctl -A $DEVICE)"
# debug smartctl output
/usr/bin/echo "$DATA" >/dev/shm/smartctl_output.txt
/usr/bin/echo "$DATA" | /usr/bin/strace -o /tmp/awk.log /usr/bin/awk '
match($0, "Data Units Written.*[[:space:]]([0-9\\.]*) \\[([0-9]+) ([a-zA-Z]+)]",r) {
gsub("\\.","",r[1])
units_written=r[1]
space_written=r[2]
space_unit=r[3]
print units_written,space_written,space_unit
}' >/dev/shm/nvme0n1_data 2>/dev/shm/nvme0n1_log
read units_written space_written space_unit </dev/shm/nvme0n1_data
# debug variables content output
echo units_written=$units_written
echo space_written=$space_written
echo space_unit=$space_unit
- xinetd für das übergeordnete Script läuft als root(Security-Diskussion interessiert mich an dieser Stelle gerade nicht)
- Die Datei smartctl_output.txt enthält immer eine korrekte smartctl-Ausgabe(normale Shell und via xinetd)
- Die 3 Variablen sind beim Aufruf aus der Shell her gefüllt, und per xinetd leer
- Die Strace-Ausgabe für den AWK-Aufruf ist bei beiden Aufrufen(in der interaktiven Shell und via xinetd) strukturell scheinbar absolut identisch, nur die ganzen Speicheradressen sind natürlich unterschiedlich.
- Die Fehlerausage /dev/shm/nvme0n1_log ist beim Aufruf über xinetd auch leer
- GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
Nachtrag:
Wenn ich am Ende das awk-Scriptes in diesem noch ein { print $0 } anfüge, d. h. schreibe bitte jede Ausgabe der Eingabedaten in die Datei, dann passiert das auch. In der Datei steht dann die komplette Smart-Ausgabe. D. h. das AWK-Script funktioniert wohl grundsätzlich. Nur eben die Variablen werden wohl nicht gefüllt. D. h. das Muster trifft da vermutlich nie zu?