observar la ejecución del script con el script monit parece ignorar las tuberías

observar la ejecución del script con el script monit parece ignorar las tuberías

Quiero tener un comando bash ejecutándose en segundo plano y monitoreado por monit. Para obtener el PID de este proceso, encontré este script en la web y lo modifiqué para que se ajuste a mis comandos: (llamado 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

Cuando ejecuto el comando

/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

En mi bash cmd funciona bien. Pero cuando hago un sdr.sh startme sale el siguiente error:

/usr/local/bin/rtl_fm: invalid option -- 'a'

Como puede ver, -aes un parámetro de multimon-ngy no de rtl_fm. Parece que esta pipa no se interpreta como pipa.

Respuesta1

Sospecho que esa ps ... greplínea en su startnotification()función devuelve información adicional. Para depurar esto aún más, ejecutaría el script con alguna depuración activada primero.

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
}

El uso set -xhabilitará la mensajería detallada y set +xla deshabilitará. Esto debería arrojar luz adicional sobre dónde está fallando su script.

información relacionada