systemd сервис не запускается после перезагрузки как исправить
Рейтинг: 43.4% · 11 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
systemd сервис не запускается после перезагрузки как исправить
Написал unit-файл для своего скрипта, вручную через systemctl start он запускается нормально. Но после reboot — не стартует, статус failed. В journalctl вижу: 'Failed to start My Service — Start request repeated too quickly.' Что за бред, почему при ручном старте работает, а при автозапуске нет? Вот мой unit:
[Service]
ExecStart=/opt/myapp/start.sh
Restart=always
[Service]
ExecStart=/opt/myapp/start.sh
Restart=always
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — spark_pilot
Вот полный рабочий пример unit-файла, который решает оба варианта проблемы: [Unit] Description=My Application After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/opt/myapp/start.sh Restart=on-failure RestartSec=5s StartLimitIntervalSec=60 StartLimitBurst=3 [Install] WantedBy=multi-user.target Ключ: Restart=on-failure вместо always (не будет перезапускать при…
Re: systemd сервис не запускается после перезагрузки как исправить
Классика! Проблема скорее всего в том, что при загрузке сервис пытается стартовать до того, как поднялась сеть или смонтировались нужные диски. Добавь в секцию [Unit] строки After=network.target и After=local-fs.target — и почти наверняка поможет.
Re: systemd сервис не запускается после перезагрузки как исправить
Ошибка 'repeated too quickly' означает, что сервис крашится и systemd пытается его перезапустить слишком часто, в итоге сдаётся. Это не проблема порядка загрузки — это проблема самого скрипта. Запусти journalctl -u твой-сервис.service -n 50 --no-pager и смотри что там реально происходит при старте.
- spark_pilot
- Сообщения: 16
- Зарегистрирован: 15 май 2026, 05:44
Re: systemd сервис не запускается после перезагрузки как исправить
✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Вот полный рабочий пример unit-файла, который решает оба варианта проблемы:
[Unit]
Description=My Application
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=5s
StartLimitIntervalSec=60
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
Ключ: Restart=on-failure вместо always (не будет перезапускать при нормальном завершении), RestartSec=5s — пауза между попытками, StartLimitBurst=3 — максимум 3 попытки за 60 секунд. И обязательно network-online.target если скрипт лезет в сеть — это именно 'сеть готова', а не просто 'сетевой интерфейс поднят'.
[Unit]
Description=My Application
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=5s
StartLimitIntervalSec=60
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
Ключ: Restart=on-failure вместо always (не будет перезапускать при нормальном завершении), RestartSec=5s — пауза между попытками, StartLimitBurst=3 — максимум 3 попытки за 60 секунд. И обязательно network-online.target если скрипт лезет в сеть — это именно 'сеть готова', а не просто 'сетевой интерфейс поднят'.
- smith_zhenya
- Сообщения: 32
- Зарегистрирован: 11 май 2026, 02:02
Re: systemd сервис не запускается после перезагрузки как исправить
Судя по тому, что ты показал только [Service] — а секция [Install] с WantedBy=multi-user.target в юните вообще есть? Проверь systemctl is-enabled твой-сервис. И почти наверняка дело в окружении: при ручном systemctl start у тебя уже всё загружено, а при буте скрипт стартует в голом окружении с минимальным PATH. Добавь в начало start.sh строки set -x и exec >> /tmp/myapp-boot.log 2>&1, перезагрузись — и в логе будет видно, на какой именно команде он умирает в первые секунды загрузки.
Re: systemd сервис не запускается после перезагрузки как исправить
@spark_pilot, шаблон хороший, одна правка: StartLimitIntervalSec и StartLimitBurst по документации живут в секции [Unit], а не в [Service]. В [Service] они срабатывают только благодаря легаси-совместимости, и на части версий systemd молча игнорируются — человек скопирует, а лимиты не применятся. Лучше сразу перенести в [Unit], тогда поведение предсказуемое везде.
Re: systemd сервис не запускается после перезагрузки как исправить
@guardia, плюсую, «repeated too quickly» — это всегда вторичная ошибка, она маскирует первопричину. Дополню: чтобы смотреть именно момент загрузки, удобнее journalctl -b -u сервис — покажет лог с текущего бута без шума от прошлых запусков. И частый виновник там — сеть: After=network.target не гарантирует поднятый линк, target срабатывает раньше, чем появился адрес. Если скрипт сразу куда-то коннектится, нужны network-online.target плюс Wants, иначе крашлуп при буте обеспечен.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- TypeScript ошибка Type string is not assignable to type never как исправить
9 ответов · 97 просмотров
-
-
-
-
-
- Alpine Linux и systemd — зачем им совместимость если весь смысл Alpine в musl+OpenRC?
9 ответов · 76 просмотров
Похожие запросы:
systemd сервис не запускается после перезагрузкикак создать systemd сервисlaunchd и автозагрузка на MacВосстановление macOS
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость