![Nagiosでコマンドが実行されない](https://rvso.com/image/789275/Nagios%E3%81%A7%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84.png)
カスタム Nagios コマンドの command_line に次のコードを配置したときに、なぜ実行されないのか、誰か説明してもらえますか? ターミナルで実行すると動作します。
command_name notify-host-by-sms
commnad_line echo -e "AT+CMGS="$CONTACTPAGER$"\r" | socat -t3 - TCP:XXX.XXX.XXX.XXX:10002 && echo -e "$HOSTNAME$ $HOSTSTATE$ $HOSTADDRESS$ $LONGDATETIME$\x1A" | socat - TCP:XXX.XXX.XXX.XXX:10002
答え1
Nagios では|
と を使用することはできないため、これをスクリプトとしてラップする必要があります。(また、タイプミスがあると機能しません。)&&
command_line
commnad_line
command_name notify-host-by-sms
commnad_line /usr/local/bin/notify-host-by-sms.sh $CONTACTPAGER$ $HOSTNAME$ $HOSTSTATE$ $HOSTADDRESS$ $LONGDATETIME$
そして、スクリプト内でそれらのコマンドライン引数を使用します。例:
#!/bin/bash
echo -e "AT+CMGS=\"${1}\"\r" \
| socat -t3 - TCP:192.0.2.1:10002 \
|| exit 1
echo -e "${2} ${3} ${4} ${5}\x1A" \
| socat - TCP:192.0.2.1:10002 \
|| exit 1
AT+CMGS=
(値の前後に引用符が必要になる可能性があるため、引用符を追加しました。これは意図したものだと思いますが、エスケープされなかっただけです。)