Почему моя услуга стала скрытой?

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

Я настроил несколько RPis с сервисом systemd, который запускает экземпляр chromium-browser в киоске, но на нескольких, казалось бы, случайных устройствах он не запускается. Я проверил статус, просто пытаясь включить его, и получаю

$ sudo systemctl enable kiosk.service
Не удалось включить юнит: Файл юнита /lib/systemd/system/kiosk.service замаскирован.

Я посмотрел, что значит “замаскированный”, чтобы понять, как это произошло, и ответы просто говорят, что “юниты связаны с /dev/null“. Хорошо, но почему это произошло с моим сервисом? ~~systemctl unmask kiosk.service снимет маску с моего сервиса, но~~ (забудьте об этом, смотрите редактирование ниже) я хотел бы убедиться, что это не продолжит происходить.

Вот содержимое “kiosk.service”, если это имеет значение:

[Unit]
Описание=Chromium Kiosk
Wants=graphical.target
After=graphical.target

[Service]
ExecStartPre=/bin/sleep 20
Environment=DISPLAY=:0.0
Environment=XAUTHORITY=/home/pi/.Xauthority
Type=simple
ExecStart=/bin/bash /home/pi/kiosk.sh
Restart=on-abort
User=pi
Group=pi

[Install]
WantedBy=graphical.target

РЕДАКТИРОВАНИЕ:

На самом деле sudo systemctl unmask kiosk.service похоже, ничего не делает. Когда я это делаю, а затем sudo systemctl enable kiosk.service, он возвращает ту же жалобу, что он замаскирован.

РЕДАКТИРОВАНИЕ2:

Так что вместо успешного снятия маски я просто удалил lib/systemd/system/kiosk.service и снова подписал его как сервис, теперь он, похоже, остается включенным. Все еще не имею понятия, почему он был замаскирован изначально.

Это требует либо перезагрузки, либо использования unmask --now

sudo systemctl unmask --now kiosk.service

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

Сервис вашего "kiosk.service" стал маскированным, что является довольно распространенной проблемой в среде системного администрирования, особенно при использовании системы управления системными единицами systemd. Давайте разберем причины, почему ваш сервис оказался в таком состоянии, а также возможные меры для предотвращения данной ситуации в будущем.

Что означает "маскировка" сервиса?

Когда сервис в systemd маскируется, это означает, что его файл единицы (unit file) переименовывается или связывается с /dev/null. В результате, все команды, касающиеся данного сервиса, такие как start, stop, enable или disable, не будут работать, так как systemd не может получить доступ к его определению. Это делается в основном с целью предотвратить случайное использование данного сервиса.

Почему ваш сервис стал маскированным?

Существует несколько причин, почему это могло произойти:

  1. Другие администраторы: Если на устройстве работало несколько администраторов или если конфигурация выполнялась через автоматизированные инструменты (например, Ansible, Puppet), вероятно, что кто-то из них случайно или намеренно маскировал сервис.

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

  3. Проблемы при установке/обновлении: Если сервис был установлен неправильно или обновлен, это могло вызвать его маскировку. Например, если файл единицы был удален или заменен, это также могло повлиять на маскировку.

  4. Механизмы безопасности: В некоторых случаях, особенно в системах с повышенными мерами безопасности, администраторы могут намеренно маскировать сервисы, которые они считают ненужными или потенциально опасными.

Как предотвратить маскировку сервиса в будущем

  1. Контроль изменений: Внедрите систему контроля версий для конфигурационных файлов ваших сервисов. Это поможет отслеживать изменения и понять, кто и когда изменил настройки.

  2. Мониторинг состояния сервисов: Используйте инструменты мониторинга, такие как Prometheus или Nagios, для отслеживания статусов ваших сервисов. Это позволит вам быстро реагировать на изменения, включая возникающие ошибки или маскировку.

  3. Документация и инструкции: Всегда придерживайтесь документации и четко фиксируйте, какие действия были проведены с сервисами. Это поможет избежать путаницы и недопонимания в команде.

  4. Обучение сотрудников: Проведите обучение для всех участников команды по основам работы с systemd. Знание команд, таких как mask и unmask, а также их последствий, поможет избежать непреднамеренных ошибок.

Заключение

Проблема маскировки сервиса "kiosk.service" может быть решена с помощью команды systemctl unmask, которая должна вернуть его в рабочее состояние. Если не удается восстановить сервис через unmask, лучше удалить его файл и заново создать, как вы сделали. Однако важно разобраться в причинах его маскировки, чтобы избежать повторения ситуации в будущем. Monitoring, документация и бессменный контроль изменений — ваши лучшие союзники в этой задаче.

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

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