cron과 터미널의 openssl s_client 호출 간의 차이점

cron과 터미널의 openssl s_client 호출 간의 차이점

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_clientstdio와 원격 서버의 소켓 사이에 양방향 연결이 실행되기 때문입니다 .

  • stdin을 소켓에 복사합니다.
  • 소켓에서 받은 데이터를 표준 출력으로 복사합니다.

에서 실행하면 cronstdin이 에 연결되어 있으므로 첫 번째 복사본이 즉시 종료 /dev/null됩니다 openssl.

openssl영구적으로 차단된 콘텐츠로 입력을 리디렉션하여 이를 완화 할 수 있으며, 더 나은 방법은 sleep 1해당 콘텐츠의 필요성을 없애는 것입니다 timeout.

그럼에도 불구하고 잠시 기다리는 것은 배너를 연결하고 기다리는 데 있어 특히나 쉽지 않은 방법입니다. 상당히 짧은 시간 초과일 뿐만 아니라 배너가 수신되면 시간 초과가 만료되기 전에 명령이 종료되지도 않습니다. 이와 같은 것을 찾고 있습니다 expect.


덧붙여서:

다른 사람들은 동의하지 않을 수도 있지만, 저는 이 질문에서 "콘솔"이라는 단어를 사용한 것이 정확하지 않다고 생각합니다. 실제로 처음 설명한 동작이 나타납니다.어느터미널 세션은 무엇보다도 다음을 수행할 수 있습니다.

  • SSH 터미널 세션,
  • xtermGUI의 터미널 에뮬레이터(유사하거나 최신 대체)
  • 창문 screen,
  • 직렬 모뎀 연결,
  • 또는 실제 시스템 콘솔.

"콘솔"이라는 단어는 특히 마지막 세션을 지칭해야 한다고 생각합니다. 하지만 이 모든 것은 터미널 세션입니다.

답변2

Cron은 작업에서 최소한의 환경 변수 세트를 사용합니다. 콘솔에서 사용하는 것 이상의 추가 기능을 사용할 수도 있습니다.

명령을 사용하면 콘솔 및 cron에서 timeouts 및 openssl을 사용할 때 which <programname>어디에 있는지 확인할 수 있습니다.

PATH스크립트 시작 부분에서 변수를 설정할 수도 있습니다 .

관련 정보