observar a execução do script com script monit parece ignorar os pipes

1

Eu quero ter um comando bash rodando em segundo plano e sendo assistido por monit. Para pegar o PID desse processo, encontrei este script na web e modifiquei para caber meus comandos: (named 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

Quando executo o 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

No meu bash cmd funciona bem. Mas quando eu faço um sdr.sh start , recebo o seguinte erro:

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

Como você pode ver, o -a é um parâmetro de multimon-ng e não de rtl_fm . Parece que esse pipe não é interpretado como pipe.

    
por Racer 15.05.2014 / 12:02

1 resposta

1

Eu suspeito que há alguma informação adicional sendo retornada por essa linha ps ... grep na sua função startnotification() . Para depurar isso mais eu rodaria o script com alguma depuração ativada primeiro.

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
}

Usar set -x ativará o recurso de mensagens detalhadas e set +x desativará. Isso deve esclarecer onde seu script está falhando.

    
por 15.05.2014 / 16:25