monit 스크립트를 사용하여 스크립트 실행을 관찰하면 파이프가 무시되는 것 같습니다.

monit 스크립트를 사용하여 스크립트 실행을 관찰하면 파이프가 무시되는 것 같습니다.

bash 명령이 백그라운드에서 실행되고 monit에서 모니터링되기를 원합니다. 이 프로세스의 PID를 얻기 위해 온라인에서 이 스크립트를 찾아 내 명령에 맞게 수정했습니다. (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

내가 명령을 실행할 때

/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

내 bash cmd에서는 잘 작동합니다. 하지만 a를 실행하면 sdr.sh start다음과 같은 오류가 발생합니다.

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

보시다시피 의 매개변수 가 아니라 의 -a매개변수입니다 . 이 파이프는 파이프로 해석되지 않는 것 같습니다.multimon-ngrtl_fm

답변1

ps ... grep귀하의 함수에 있는 해당 행이 몇 가지 추가 정보를 반환하는 것 같습니다 startnotification(). 추가 디버깅을 위해 먼저 일부 디버깅을 활성화한 상태에서 스크립트를 실행하겠습니다.

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
}

를 사용하면 set -x자세한 메시징이 활성화되고 set +x비활성화됩니다. 이를 통해 스크립트가 실패한 위치에 대한 추가 통찰력을 얻을 수 있습니다.

관련 정보