Разница между вызовом openssl s_client в cron и терминале

Я бы хотел отслеживать баннеры Microsoft Exchange.

Когда в консоли запускаю команду:

  • Использовать / etc / aliases для исходящей почты, переданной postfix с локальным доменом
  • Почему блок-разделитель (ASCII 31) невидим в выводах терминала?
  • Centos / RHEL 7: обновление OpenSSL недоступно
  • Dtach и Vim через Ssh: сеанс повторной настройки
  • Можно ли загружать ядро ​​x86 Linux с помощью консолей с текстовым режимом 80x25 и консолей-пультов VESA?
  • Использование переменной даты с помощью wget -post-data
  • 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) --- 

    Какая разница между cron и консолью? Спасибо.

  • Как меньше узнать о терминальном разрешении?
  • Закрытый ключ OpenSSH запутан: Ключ нагрузки: неверный формат
  • Как сделать вариант FreeBSD недель календарного старта в понедельник?
  • Почему возможно> / dev / null 2> & 1 не работает?
  • crontab, экземпляр, проблемы с памятью + спам
  • Есть ли легенда в каком-то месте, которое описывает все эти цветовые кодировки в нижней части byobu?
  • 2 Solutions collect form web for “Разница между вызовом openssl s_client в cron и терминале”

    Скорее всего, при запуске в режиме cron соединение было закрыто до того, как удаленный сервер смог опубликовать свой баннер. Это связано с тем, что openssl s_client управляет двунаправленным соединением между его stdio и сокетом на удаленном сервере:

    • Он копирует stdin в сокет
    • Он копирует данные, полученные в сокете, в стандартный вывод

    При работе в cron первая копия немедленно завершается, потому что stdin подключен к /dev/null . Это заставило openssl уйти.

    Вы могли бы смягчить это, перенаправляя ввод openssl на то, что блокирует навсегда или, еще лучше, что-то вроде sleep 1 которое избавит вас от необходимости timeout .

    Тем не менее, ожидание одной секунды является особенно хрупким способом подключения и ожидания баннера. Мало того, что это довольно короткий тайм-аут, но он даже не приводит к тому, что команда выходит за пределы истечения времени ожидания при получении баннера. Для чего-то вроде этого вы ищите.


    Кстати:

    Другие, вероятно, не согласятся, но я считаю, что использование термина «консоль» в этом вопросе неточно. Фактически, вы получите поведение, которое вы впервые описали в любой терминальной сессии, которая может быть, среди прочего:

    • сеанс терминала ssh,
    • терминальный эмулятор (например, xterm или современные замены) в вашем графическом интерфейсе
    • screen окно,
    • последовательное модемное соединение,
    • или фактической системной консоли.

    Я считаю, что термин «консоль» должен относиться исключительно к последнему, но все это терминальные сеансы.

    Cron использует минимальный набор переменных среды для ваших заданий. И может использовать другие функции, чем вы используете в консоли.

    Вы можете использовать команду which <programname> чтобы увидеть местоположение таймаута и openssl, когда вы используете их в консоли, а также в cron.

    Вы также можете установить переменную PATH в начале вашего скрипта.

    Linux и Unix - лучшая ОС в мире.