#Что означает ошибка
rc-service: service not started / * ERROR: service failed to start
В Alpine Linux службы управляются OpenRC, а не systemd. Сообщение ERROR: ... failed to start или статус crashed/stopped означает, что скрипт /etc/init.d/имя завершился с ошибкой. Журналов systemd нет, поэтому диагностика делается иначе.
Запускайте службу в режиме отладки и читайте syslog.
Проверьте зависимости и уровни запуска.
В Alpine вместо systemd используется OpenRC. Если служба не стартует, смотрите вывод rc-service и журнал приложения, проверяйте зависимости и добавление в автозапуск.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Служба не добавлена | Нет в runlevel. | rc-update add. |
| Ошибка конфигурации | Конфиг. | Проверьте. |
| Порт занят | Конфликт. | Освободите. |
| Нет зависимости | Сеть. | Добавьте need. |
#Пошаговое решение
- Проверьте rc-service имя statusВ Alpine с OpenRC проверьте нужную службу командой
rc-service ИМЯ status, подставив её настоящее имя. Если не работает, используйтеrc-service ИМЯ startтолько после просмотра логов и конфигурации; для автозапуска применяютrc-updateлишь по необходимости. Не используйтеsystemctl— в типовой Alpine его нет. - Запустите с отладкойУточните точное имя службы командой
rc-statusи найдите её скрипт в/etc/init.d/. От root либо черезdoasзапуститеrc-service -d ИМЯ start, заменив ИМЯ реальным именем изrc-status(например,sshd); параметр-dвключает отладочный вывод OpenRC. Не выполняйте такой запуск для критичной удалённой службы SSH без резервного доступа. Сохраните последние строки ошибки и сопоставьте их с конфигурацией службы в/etc/conf.d/ИМЯили документацией конкретного приложения. - Включите syslog и прочитайте /var/log/messagesЕсли сообщение OpenRC говорит об ошибке службы, проверьте журнал именно этой программы. В Alpine с установленным syslog просмотрите
tail -n 100 /var/log/messages; дляsshdнайдите строкиsshd, для nginx — соответствующий журнал nginx, если он настроен. Если/var/log/messagesотсутствует, это не обязательно неисправность: в минимальных образах и контейнерах системный журнал может быть не настроен. Сначала уточните, где приложение пишет ошибки (rc-service -d ИМЯ startи его настройки), а уже затем устанавливайте и настраивайте журналирование по документации Alpine. - Проверьте зависимости и портыОткройте
/etc/init.d/ИМЯтолько для чтения и проверьте строкиneed,use,beforeи конфигурацию/etc/conf.d/ИМЯ. Командаrc-statusпокажет состояние служб, аrc-update show— какие добавлены в уровни запуска. Если программа слушает сетевой порт, при наличииssвыполнитеss -lntupи убедитесь, что другой процесс его не занял; ошибки доступа проверяйте по журналу. Не устанавливайте пакеты черезapt: в Alpine используетсяapk. После устранения конкретной причины повторно запуститеrc-service ИМЯ startи проверьтеrc-service ИМЯ status. - Сбросьте crashedЕсли OpenRC показывает для службы состояние
crashed, сначала прочитайте её журнал и устраните причину (ошибка конфигурации, порт, отсутствие каталога или прав). После этого администратор может выполнитьrc-service ИМЯ_СЛУЖБЫ zap, подставив реальное имя изrc-status; эта команда сбрасывает ошибочное состояние OpenRC, но не чинит сам сервис. Затем запуститеrc-service ИМЯ_СЛУЖБЫ startи проверьтеstatus. Не сбрасывайте состояние неизвестных системных служб без журнала ошибки. - Дополнительная команда по темеLinux · Терминал (Bash)КомандаСервис nginx из примера не должен запускаться и добавляться в автозапуск для любой службы OpenRC.
rc-statusrc-status -a
#Диагностика
Статус: rc-service имя status, список: rc-status -a. Запуск с выводом: rc-service имя start и проверка ошибок. Отладка скрипта: sh -x /etc/init.d/имя start. Журнал: установите syslog (apk add busybox-syslogd && rc-update add syslog boot && rc-service syslog start) и смотрите /var/log/messages. Включите вывод в файл для конкретной службы через output_log="/var/log/имя.log" в /etc/conf.d/имя (если поддерживается).
#Причины
Нет зависимости (need net) — сеть не поднята: rc-service networking start. Неверная конфигурация приложения: проверьте файл в /etc/conf.d/имя и конфигурацию самой программы. Занят порт: netstat -tlnp (пакет net-tools) или ss -ltnp. Права/пользователь: проверьте command_user в init-скрипте. Нет PID-каталога: mkdir -p /run/имя. Для служб с запуском из контейнеров OpenRC не работает без openrc: используйте docker run с CMD.
#Управление автозапуском
Добавить в автозапуск: rc-update add имя default, удалить: rc-update del имя. Список: rc-update show. Перезапуск зависимостей: rc-service имя restart. Сбросить статус crashed: rc-service имя zap. Установка служб: apk add имя-openrc — отдельный пакет со скриптом (например, nginx-openrc, sshd через openssh). Документация: .
zap принудительно сбрасывает состояние OpenRC и не должен выполняться автоматически; для другого сервиса используйте фактическое имя.rc-status -arc-service nginx status