Ich möchte einen Bash-Befehl im Hintergrund laufen lassen, der von monit überwacht wird. Um die PID dieses Prozesses zu erhalten, habe ich dieses Skript im Internet gefunden und es so geändert, dass es zu meinen Befehlen passt: (mit dem Namen sdr.sh)
#!/bin/bash
NAME="sdr"
LOG_FILE="/tmp/$NAME.log"
PID_FILE="/var/run/$NAME.pid"
CMD="/usr/local/bin/rtl_fm -o 4 -A lut -s 22050 -f 254.2355M - | /usr/local/bin/multimon-ng -t raw -f alpha /dev/stdin |& /home/me/import.rb"
function startnotification {
VAR=`ps -ef | grep "$CMD" | grep -v grep | wc -l`
if [ $VAR -gt 0 ]; then
echo "$NAME already running..."
else
nohup $CMD > $LOG_FILE 2>&1 &
echo $! > $PID_FILE
echo "$NAME listener is started..."
fi
}
function stopnotification {
kill `cat /var/run/$NAME.pid`
rm -f $PID_FILE
echo "$NAME listener stopped."
}
case $1 in
start) startnotification;;
stop) stopnotification;;
restart)
stopnotification
startnotification;;
*)
echo "usage: $NAME {start|stop}" ;;
esac
exit 0
Wenn ich den Befehl ausführe
/usr/local/bin/rtl_fm -o 4 -A lut -s 22050 -f 254.2355M - | /usr/local/bin/multimon-ng -t raw -a POCSAG1200 -f alpha /dev/stdin |& /home/me/import.rb
In meinem Bash-Befehl funktioniert es einwandfrei. Aber wenn ich Folgendes mache, sdr.sh start
erhalte ich die folgende Fehlermeldung:
/usr/local/bin/rtl_fm: invalid option -- 'a'
Wie Sie sehen, -a
ist dies ein Parameter von multimon-ng
und nicht von rtl_fm
. Es scheint, dass dieses Pipe nicht als Pipe interpretiert wird.
Antwort1
Ich vermute, dass diese ps ... grep
Zeile in Ihrer startnotification()
Funktion zusätzliche Informationen zurückgibt. Um dies weiter zu debuggen, würde ich das Skript zunächst mit aktiviertem Debugging ausführen.
function startnotification {
set -x
VAR=`ps -ef | grep "$CMD" | grep -v grep | wc -l`
if [ $VAR -gt 0 ]; then
echo "$NAME already running..."
else
nohup $CMD > $LOG_FILE 2>&1 &
echo $! > $PID_FILE
echo "$NAME listener is started..."
fi
set +x
}
Durch die Verwendung von set -x
wird die ausführliche Nachrichtenübermittlung aktiviert bzw. set +x
deaktiviert. Dies sollte zusätzliche Aufschluss darüber geben, wo Ihr Skript fehlschlägt.