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 start
me sale el siguiente error:
/usr/local/bin/rtl_fm: invalid option -- 'a'
Como puede ver, -a
es un parámetro de multimon-ng
y no de rtl_fm
. Parece que esta pipa no se interpreta como pipa.
Respuesta1
Sospecho que esa ps ... grep
lí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 -x
habilitará la mensajería detallada y set +x
la deshabilitará. Esto debería arrojar luz adicional sobre dónde está fallando su script.