Почему irexec из LIRC не работает должным образом при загрузке?

Вопрос или проблема

Я собрал LIRC из исходного кода и установил его. Он запускается как сервис systemd при загрузке и работает отлично. Я могу запустить irw, и он отображает ожидаемый вывод. Я могу запустить ircat, и он показывает, что должно выполняться в строке config файла конфигурации lircrc.

Проблема у меня с irexec. Когда я запускаю его из оболочки, он работает нормально. Когда я запускаю его вручную, выполняя systemctl start irexec.service, он работает нормально. Как только я перезагружаю компьютер, и он должен запускаться автоматически, и действительно запускается, но не выполняет мою команду; он абсолютно ничего не делает. В журналах даже нет сообщений об ошибках.

Странно, но если я перезапускаю irexec.service после загрузки, после того как он уже был запущен, он работает нормально и выполняет мою команду без ошибок. Есть какие-то догадки, почему это происходит?

Это файл irexec.service

[Unit]
Description=LIRC command handler
After=network.target
Wants=lircd.service

[Service]
Type=simple
ExecStart=/usr/bin/irexec /etc/lirc/lircrc

[Install]
WantedBy=multi-user.target

irexec.service всегда запускается после того, как lircd.service уже работает.

ИЗМЕНЕНИЕ Я использую LIRC 0.9.4-devel

У меня была такая же проблема, но наоборот,

Изменение файла irexec.service и использование команд systemctl не кажется работающим для запуска и остановки сервиса. Необходима полная перезагрузка.

Возможно, вы забыли опцию –daemon.

Это мой файл irexec.service:

[Unit]
Description=IR Remote irexec config .lircrc loaded on startup
After=lircd.service
Wants=lircd.service

[Service]
ExecStart=/usr/bin/irexec --daemon $HOME/.lircrc
Type=forking

[Install]
WantedBy=multi-user.target

Это, вероятно, очевидно, но я пробовал все ответы здесь и в других местах, и ни один из них не помог заставить systemctl запускать и держать irexec работающим после загрузки. Я решил проблему, полностью удалив и заново установив LIRC, после чего скопировал свои самодельные конфигурационные файлы в папку /etc/lirc. Жаль, что не попробовал это сначала. Это бы сэкономило кучу времени.

sudo apt purge lirc
sudo apt install lirc
# затем скопируйте свои пользовательские конфигурационные файлы 
# irexec.lircrc помещается в /etc/lirc/ 
# файлы remote.conf помещаются в /etc/lirc/lircd.conf.d/ 

Что помогло мне, так это включение сервиса irexec с помощью

sudo systemctl enable irexec

Мне не нужна была опция –daemon в irexec.service, как это требовалось @The Demz.

Я только что отправил сообщение об ошибке, чтобы irexec запускался после lircd (after:lircd).

.

Ответ или решение

Теория

В современном IT-управлении автоматизация различных процессов и служб при загрузке операционной системы является важным компонентом обеспечения стабильной работы системы. Одной из таких служб является LIRC — Linux Infrared Remote Control, которая позволяет использовать ИК-пульты для управления ПК. Инструмент irexec из комплекта LIRC выполняет команды, ассоциированные с приемом ИК-сигналов, и должна автоматически запускаться при старте системы. Однако, иногда после загрузки irexec не работает должным образом, что приводит к необходимости ручного вмешательства. Давайте разберемся, почему это может происходить и как исправить ситуацию.

Пример

Вы собрали LIRC из исходников и настроили его как системную службу в systemd. Программа irw работает корректно и отображает ожидаемый вывод. Irкат также функционирует должным образом и распознает команды из конфигурационного файла lircrc. Проблема возникает именно с irexec: если его запустить вручную через systemctl start irexec.service, он работает, но при автоматическом старте во время загрузки системы команда не исполняется. Единственным текущим решением является перезапуск службы вручную после загрузки.

Вот текущий файл конфигурации irexec.service:

[Unit]
Description=LIRC command handler
After=network.target
Wants=lircd.service

[Service]
Type=simple
ExecStart=/usr/bin/irexec /etc/lirc/lircrc

[Install]
WantedBy=multi-user.target

Несмотря на то, что служба загружается после старта lircd.service, команды не исполняются до перезапуска службы.

Применение

Существует несколько причин, по которым irexec может не выполнять команды при автозапуске:

  1. Проблема порядка загрузки служб: Даже если irexec.service настроен на старт после lircd.service, возможно, что определенные зависимости, включая сеть или другие устройства, необходимые для функционирования irexec, еще не готовы. Помещение предусловия на ожидание подготовки необходимых ресурсов может помочь.

  2. Настройка Type у службы: Возможно, Type=simple не подходит для вашего случая. Попробуйте изменить это на Type=forking и добавьте в ExecStart параметр –daemon, что позволит программе корректно демонизироваться.

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

  4. Взаимодействие с systemd: Убедитесь в том, что служба irexec действительно включена в автозагрузку с помощью команды sudo systemctl enable irexec.service. Проверка состояния службы через sudo systemctl status irexec.service после автозагрузки также может дать ценную информацию о причине сбоя.

  5. Журнал systemd: Используйте Journalctl для более детальной диагностики проблем: journalctl -u irexec.service может раскрыть специфичные ошибки или варнинги, указывающие на источник проблемы.

Следуя данным шагам, можно максимально предотвратить возможные сбои в работе irexec и обеспечить её стабильный старт при загрузе операционной системы. Подходя к вопросу комплексно и внимательно проверяя каждый этап взаимодействия irexec с системой, можно восстановить его работоспособность и автоматизировать контроль за исполнением команд от пульта.

Оцените материал
Добавить комментарий

Капча загружается...