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

Частичный ответ:

Я посмотрел патч ALC 1220, и он просто добавляет то же исправление, что и для ALC 882 (который используется целым рядом кодеков).

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

Идеи:

1) Посмотри в биосе есть ли какие настройки звуковой карты. Возможно, изменив что-то здесь, связь с кодеком заработает.

2) В HD-Audio.txtговорится, что вы можете принудительно проверить, не работает ли BIOS:

На машине со сломанным BIOS иногда необходимо принудительно драйвер для проверки слотов кодеков, которые аппаратное обеспечение не сообщает об использовании. В таком случае включите бит 8 (0x100) опции probe_mask. Затем остальные 8 бит передаются как слоты кодека для проверки. безусловно. Например, probe_mask=0x103заставит проверить слоты кодека 0 и 1 независимо от того, что сообщает аппаратное обеспечение.

Попробуйте от имени пользователя root

modprobe -r snd_hda_intel
modprobe snd_hda_intel probe_mask=0x1ff

и посмотрите, что произойдет в dmesg.

3) Если ничего не помогает, сообщите об ошибке разработчикам ALSA и посмотрите, есть ли у них идеи.

1
03.03.2017, 01:06
2 ответа

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

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

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

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

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


Между прочим:

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

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

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

1
28.01.2020, 01:00

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

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

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

-1
28.01.2020, 01:00

Теги

Похожие вопросы