Microsoft Exchange 배너를 모니터링하고 싶습니다.
콘솔에서 명령을 실행하면 다음과 같습니다.
timeout 1 openssl s_client -connect 192.168.0.5:995 > /tmp/1.txt
산출:
tail -n 4 /tmp/1.txt:
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
+OK The Microsoft Exchange POP3 service is ready.
이 명령을 cron에 추가하면 다음과 같은 결과가 출력됩니다.
tail -n 4 /tmp/1.txt
Start Time: 1488382801
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
크론과 콘솔의 차이점은 무엇입니까? 감사해요.
답변1
에서 실행할 때 cron
원격 서버가 배너를 보내기 전에 연결이 닫힐 가능성이 높습니다. 이는 openssl s_client
stdio와 원격 서버의 소켓 사이에 양방향 연결이 실행되기 때문입니다 .
- stdin을 소켓에 복사합니다.
- 소켓에서 받은 데이터를 표준 출력으로 복사합니다.
에서 실행하면 cron
stdin이 에 연결되어 있으므로 첫 번째 복사본이 즉시 종료 /dev/null
됩니다 openssl
.
openssl
영구적으로 차단된 콘텐츠로 입력을 리디렉션하여 이를 완화 할 수 있으며, 더 나은 방법은 sleep 1
해당 콘텐츠의 필요성을 없애는 것입니다 timeout
.
그럼에도 불구하고 잠시 기다리는 것은 배너를 연결하고 기다리는 데 있어 특히나 쉽지 않은 방법입니다. 상당히 짧은 시간 초과일 뿐만 아니라 배너가 수신되면 시간 초과가 만료되기 전에 명령이 종료되지도 않습니다. 이와 같은 것을 찾고 있습니다 expect
.
덧붙여서:
다른 사람들은 동의하지 않을 수도 있지만, 저는 이 질문에서 "콘솔"이라는 단어를 사용한 것이 정확하지 않다고 생각합니다. 실제로 처음 설명한 동작이 나타납니다.어느터미널 세션은 무엇보다도 다음을 수행할 수 있습니다.
- SSH 터미널 세션,
xterm
GUI의 터미널 에뮬레이터(유사하거나 최신 대체)- 창문
screen
, - 직렬 모뎀 연결,
- 또는 실제 시스템 콘솔.
"콘솔"이라는 단어는 특히 마지막 세션을 지칭해야 한다고 생각합니다. 하지만 이 모든 것은 터미널 세션입니다.
답변2
Cron은 작업에서 최소한의 환경 변수 세트를 사용합니다. 콘솔에서 사용하는 것 이상의 추가 기능을 사용할 수도 있습니다.
명령을 사용하면 콘솔 및 cron에서 timeouts 및 openssl을 사용할 때 which <programname>
어디에 있는지 확인할 수 있습니다.
PATH
스크립트 시작 부분에서 변수를 설정할 수도 있습니다 .