Вопрос или проблема
Я создал и активировал свой собственный файл службы 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
не запускается автоматически при загрузке системы, даже несмотря на то, что она успешно включает и запускается вручную, это может быть связано с несколькими причинами. Вот что вы можете сделать для диагностики и исправления ситуации.
-
Проверка зависимостей: Убедитесь, что все службы и зависимости, от которых зависит ваша служба
samba-container
, доступны и работающие на момент ее запуска. В вашем unit-файле указаноAfter=ui-container.service
, что означает, чтоsamba-container
будет запускаться только послеui-container
. Если вui-container
есть зависимости, которые могут быть не загружены на момент старта, то ваша служба не сможет стартовать. -
Обновление секции [Unit]:
Добавьтеnetwork-online.target
в секцию[Unit]
, чтобы гарантировать, что служба не будет запущена, пока все сетевые интерфейсы не будут доступны. Ваш unit-файл должен выглядеть следующим образом:[Unit] Description=SAMBA Container After=ui-container.service network-online.target Wants=network-online.target
-
Логи для диагностики: Если изменения в unit-файле не решают проблему, проверьте логи системы после перезагрузки и попытки автоматического запуска службы. Используйте следующую команду для просмотра журналов:
journalctl -u samba-container.service -b
Это покажет вам логи, связанные только с вашей службой за текущую загрузку системы. Обратите внимание на сообщения об ошибках, которые могут указать на конкретную проблему.
-
Проблемы в сценарии
samba.sh
: Убедитесь, что в вашем сценарии нет ошибок, которые могут привести к его неудаче при запуске. Попробуйте протестировать сценарий вручную и убедитесь, что он выполняется без ошибок. -
Таймауты и задержки: Учитывая, что ваш сценарий
samba.sh
использует Docker, попробуйте протестировать, как работает служба с увеличениемExecStartPre
, чтобы дать другим службам больше времени для инициализации. Например, изменитеsleep 10
наsleep 20
или больше, чтобы проверить, будет ли это иметь значение. -
Проверка состояния службы: После перезагрузки системы выполните:
systemctl status samba-container
Это позволит вам убедиться, что служба активна или получить детали о том, почему она могла не запуститься.
-
Дополнительные отладочные сообщения: Вы можете добавить больше отладочных логов в ваш сценарий для понимания, на каком этапе он может давать сбой.
Следуя этим рекомендациям, вы сможете диагностировать и, надеюсь, решить проблему с автоматическим запуском вашей службы при загрузке. Если у вас возникнут дополнительные вопросы или если вы столкнетесь с ошибками, пожалуйста, добавьте сообщения об ошибках здесь для дальнейшего анализа.