다음 쉘 스크립트를 준비 중입니다.
#!/bin/bash
(echo open mailserver.nowhere.local 25; sleep 1; echo EHLO; echo quit)\
| telnet | grep "?Invalid command"
if [ $? -eq 1 ]; then
if [ -r /tmp/sendmail_stopped ]; then
rm /tmp/sendmail_stopped
/etc/init.d/sendmail start
mail -s "sendmail has started back up." [email protected] < /dev/null
else
echo "sendmail OK"
fi
else
if [ ! -r /tmp/sendmail_stopped ]; then
touch /tmp/sendmail_stopped
/etc/init.d/sendmail stop
else
echo "sendmail still not OK"
fi
fi
이와 같이
*/5 * * * * root /home/amr/bin/sendmail_alive.sh 2>&1 > /tmp/sendmail_alive.log
하지만 여전히 사령부로부터 이메일을 받습니다 telnet
.
나는 명령의 출력이 포함된 이메일을 받지 않도록 여러 가지 방법을 시도했습니다 telnet
.
Connection closed by foreign host.
내가 뭘 잘못하고 있는지 이해가 안 돼요. 어떤 제안이라도 대단히 감사하겠습니다.
답변1
일반적인 실수, 잘못된 리디렉션 순서, 다음을 시도해 보세요.
… sendmail_alive.sh >/tmp/sendmail_alive.log 2>&1
작동 방식은 다음과 같습니다.
- 파일 설명자 표준 출력
/tmp/sendmail_alive.log
/tmp/sendmail_alive.log
파일 설명자 stderr를 stdout() 값으로
명령에 따라 먼저 stderr를 원래 stdout으로 지정한 다음 "외부 호스트에 의해 연결이 닫혔습니다"라는 stderr 메시지가 표시됩니다. 결과가 있습니다.