Systemctl не запускает мою включенную службу автоматически при загрузке

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

Я создал и активировал свой собственный файл службы systemd 253.1 в Linux. Я успешно выполнил команду ‘systemctl enable samba-container’, и команда ‘systemctl status’ показывает, что служба активирована.

Я могу успешно вручную запустить ‘systemctl start samba-container’. Служба запускается и работает как ожидается. Проблема в том, что я не могу настроить автоматический запуск службы при загрузке. Ошибок или другого вывода, который я мог бы найти, нет — служба просто находится в неактивном состоянии при включении питания.

Статус:

[root@device ~]$  systemctl status samba-container
* samba-container.service - SAMBA Container
     Loaded: загружено (/lib/systemd/system/samba-container.service; enabled; preset: disabled)
     Active: inactive (dead)

Содержимое файла приведено ниже (обратите внимание, что ui-container работает и ‘активен’):

cat /lib/systemd/system/samba-container.service
[Unit]
Description=SAMBA Container
After=ui-container.service

[Service]
TimeoutStartSec=0
TimeoutStopSec=0
TimeoutSec=0
MemoryAccounting=yes
MemoryHigh=128M
MemoryMax=256M
WorkingDirectory=/data
ExecStartPre=/bin/bash -c "sleep 10"
ExecStart=/data/samba.sh
ExecStop=/usr/bin/docker stop samba

[Install]
WantedBy=multi-user.target

Скрипт samba.sh приведен ниже:

#!/bin/bash

docker kill samba 1>/dev/null 2>/dev/null
docker rm samba 1>/dev/null 2>/dev/null
iptables -A INPUT -m state --state NEW -p udp --dport 137 -j ACCEPT
iptables -A INPUT -m state --state NEW -p udp --dport 138 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 445 -j ACCEPT

mkdir -p /data/samba
mkdir -p /data/data

docker run --network host --privileged -v "/data/data:/data" -v "/data/samba:/samba"  --name samba crazymax/samba

Служба, вероятно, не смогла запуститься из-за того, что какая-то другая служба, от которой она зависела, не была готова, и она завершила работу. Вы можете выяснить причину, проверив файлы журналов в /var/log.

Тем не менее, поскольку запуск службы вручную позднее работает, вероятно, вам просто нужно задержать запуск службы. Я предлагаю добавить network-online.target в строку After, уже имеющуюся в вашем [unit] разделе.

Если это не решит проблему, вам необходимо проверить журналы и найти настоящую ошибку, которая вызывает завершение работы после запуска. Если вы не понимаете ошибку, вы можете добавить ее в свой вопрос здесь.

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

Если ваша служба samba-container не запускается автоматически при загрузке системы, даже несмотря на то, что она успешно включает и запускается вручную, это может быть связано с несколькими причинами. Вот что вы можете сделать для диагностики и исправления ситуации.

  1. Проверка зависимостей: Убедитесь, что все службы и зависимости, от которых зависит ваша служба samba-container, доступны и работающие на момент ее запуска. В вашем unit-файле указано After=ui-container.service, что означает, что samba-container будет запускаться только после ui-container. Если в ui-container есть зависимости, которые могут быть не загружены на момент старта, то ваша служба не сможет стартовать.

  2. Обновление секции [Unit]:
    Добавьте network-online.target в секцию [Unit], чтобы гарантировать, что служба не будет запущена, пока все сетевые интерфейсы не будут доступны. Ваш unit-файл должен выглядеть следующим образом:

    [Unit]
    Description=SAMBA Container
    After=ui-container.service network-online.target
    Wants=network-online.target
  3. Логи для диагностики: Если изменения в unit-файле не решают проблему, проверьте логи системы после перезагрузки и попытки автоматического запуска службы. Используйте следующую команду для просмотра журналов:

    journalctl -u samba-container.service -b

    Это покажет вам логи, связанные только с вашей службой за текущую загрузку системы. Обратите внимание на сообщения об ошибках, которые могут указать на конкретную проблему.

  4. Проблемы в сценарии samba.sh: Убедитесь, что в вашем сценарии нет ошибок, которые могут привести к его неудаче при запуске. Попробуйте протестировать сценарий вручную и убедитесь, что он выполняется без ошибок.

  5. Таймауты и задержки: Учитывая, что ваш сценарий samba.sh использует Docker, попробуйте протестировать, как работает служба с увеличением ExecStartPre, чтобы дать другим службам больше времени для инициализации. Например, измените sleep 10 на sleep 20 или больше, чтобы проверить, будет ли это иметь значение.

  6. Проверка состояния службы: После перезагрузки системы выполните:

    systemctl status samba-container

    Это позволит вам убедиться, что служба активна или получить детали о том, почему она могла не запуститься.

  7. Дополнительные отладочные сообщения: Вы можете добавить больше отладочных логов в ваш сценарий для понимания, на каком этапе он может давать сбой.

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

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

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