Команда /opt/etc/init.d/rc.unslung start вручную запускает все сервисы, установленные через Optware или Entware, — и если после перезагрузки роутера ваши пакеты «молчат», проблема почти всегда кроется именно в связке скрипта rc.unslung и каталога /opt/etc/init.d. Понимание того, как эта связка устроена, избавляет от ручного запуска служб после каждого ребута.

В этой статье разберём назначение каталога /opt/etc/init.d, роль скрипта rc.unslung, соглашения об именовании стартовых файлов и типовые ошибки, из-за которых автозапуск не срабатывает. Материал ориентирован на владельцев роутеров с альтернативными прошивками и на тех, кто ставит пакеты на стоковые прошивки с поддержкой Entware.

Что такое /opt/etc/init.d и зачем он нужен

Каталог /opt/etc/init.d — это аналог системного /etc/init.d из классического Linux, но для пакетов, установленных в окружение Optware или Entware. Роутерная прошивка живёт в собственной корневой файловой системе, а всё стороннее ПО размещается в /opt, чтобы не конфликтовать с прошивкой и переживать её обновления.

Каждый пакет, которому нужен автозапуск (например, Dropbear, Transmission, dnsmasq из Entware), кладёт сюда свой стартовый скрипт. Скрипт обязан уметь как минимум два аргумента: start и stop. Именно через них система управляет службой.

  • 📁 /opt/etc/init.d/ — каталог со стартовыми скриптами пакетов.
  • 🔧 Каждый скрипт принимает аргументы start, stop, обычно также restart.
  • 🔑 Файлы должны иметь права на исполнение, иначе они будут проигнорированы.

Роль скрипта rc.unslung

rc.unslung — это «дирижёр», который перебирает все исполняемые файлы в /opt/etc/init.d и вызывает их с нужным аргументом. Название досталось в наследство от прошивки Unslung для сетевого хранилища Linksys NSLU2 — именно там зародилась экосистема Optware, и имя скрипта сохранилось по традиции, хотя само устройство давно история.

Логика работы проста: при вызове rc.unslung start скрипт находит в каталоге файлы, соответствующие шаблону S*, и запускает их по очереди в алфавитном порядке. При rc.unslung stop аналогично обрабатываются файлы K* — они отвечают за корректную остановку служб. Такой же принцип использует классический SysV init.

💡

rc.unslung не запускает службы сам по себе — он лишь вызывает по очереди исполняемые скрипты S* и K* из /opt/etc/init.d. Если скрипта нет или он не исполняемый, служба не стартует.

Соглашения об именовании скриптов

Имя файла в /opt/etc/init.d — это не просто ярлык, а управляющая конструкция. Первая буква определяет действие, две цифры после неё — порядок запуска, остаток имени — произвольное описание службы.

Пример имениНазначениеКогда срабатывает
S10cronЗапуск планировщика cronПри старте, рано в очереди
S50dropbearЗапуск SSH-сервераПри старте, средняя очередь
S95transmissionЗапуск торрент-клиентаПри старте, в конце очереди
K50dropbearОстановка SSH-сервераПри остановке служб

Чем меньше число, тем раньше стартует служба. Это важно для зависимостей: например, сетевые сервисы логично запускать после того, как подняты базовые механизмы. Файлы, чьи имена не начинаются с S или K, rc.unslung просто пропускает — этим удобно пользоваться для временного отключения службы, переименовав скрипт.

💡

Чтобы временно отключить автозапуск службы, не удаляйте скрипт — переименуйте его, например из S50dropbear в _S50dropbear. Вернуть автозапуск можно обратным переименованием.

Как проверить и починить автозапуск

Диагностику начните с простого: посмотрите содержимое каталога и права файлов. Для этого подключитесь к роутеру по SSH и выполните:

ls -l /opt/etc/init.d/

В выводе у каждого рабочего скрипта в правах должны присутствовать флаги исполнения (например, -rwxr-xr-x). Если флага x нет, скрипт не запустится. Исправить это можно командой:

chmod +x /opt/etc/init.d/S50dropbear

Далее проверьте, работает ли ручной запуск через сам rc.unslung:

/opt/etc/init.d/rc.unslung start

Если после ручного запуска службы поднимаются, а после перезагрузки — нет, значит проблема не в скриптах, а в том, что прошивка не вызывает rc.unslung при старте. Способ подключения автозапуска зависит от прошивки: в одних используется механизм вроде post-mount-скриптов, в других — собственные страницы веб-интерфейса или systemd-юниты. Точный механизм стоит уточнить в документации именно вашей прошивки.

☑️ Диагностика автозапуска Entware/Optware

Выполнено: 0 / 5
⚠️ Внимание: команды chmod и правка скриптов выполняются от root. Ошибка в стартовом скрипте может «подвесить» загрузку служб или оставить службу неработающей — перед правкой делайте копию файла, например cp S50dropbear S50dropbear.bak.
📊 Что чаще всего оказывалось причиной нерабочего автозапуска у вас?
Отсутствие прав на исполнение
Неправильное имя скрипта
rc.unslung не вызывался прошивкой
Ошибка внутри самого скрипта

Типовые ошибки и их признаки

Практика показывает несколько повторяющихся сценариев, из-за которых связка rc.unslung + /opt/etc/init.d не работает. Ни одна из них не требует перепрошивки — все решаются проверкой и точечной правкой.

  • 🚫 Нет прав на исполнение — скрипт есть, но без флага x; лечится chmod +x.
  • 🏷️ Имя не по шаблону — файл назван dropbear.sh вместо S50dropbear; rc.unslung его игнорирует.
  • 🧩 Скрипт с Windows-переводами строк — если файл правили в Notepad на Windows, интерпретатор может не распознать shebang; проверяется командой file или cat -A.
  • 💾 /opt не смонтирован — если флешка с Entware не успела смонтироваться к моменту вызова rc.unslung, скрипты физически недоступны.

Отдельный частый случай — гонка при загрузке: прошивка вызывает автозапуск раньше, чем смонтирован USB-накопитель с /opt. Возможное решение — задержка перед вызовом rc.unslung (например, sleep в вызывающем скрипте) или механизм запуска, привязанный к событию монтирования, если прошивка его поддерживает.

⚠️ Внимание: не размещайте стартовые скрипты вне /opt/etc/init.d с расчётом, что rc.unslung их подхватит, — он работает только с этим каталогом. Символические ссылки из каталога на скрипты в других местах обычно допустимы, но целевой файл тоже должен быть исполняемым.
Чем Optware отличается от Entware

Optware — исторически первый репозиторий пакетов для встраиваемых устройств, выросший из проекта Unslung для NSLU2. Entware — его более позднее и активно поддерживаемое развитие со свежими версиями пакетов. Принцип автозапуска через /opt/etc/init.d и rc.unslung у обоих одинаковый, поэтому материал статьи применим к обеим системам.

Создание собственного стартового скрипта

Если вы установили программу вручную и пакетного скрипта у неё нет, напишите свой. Минимальный шаблон выглядит так:

#!/bin/sh

case "$1" in

start)

/opt/bin/myapp --daemon

;;

stop)

killall myapp

;;

*)

echo "Usage: $0 {start|stop}"

exit 1

;;

esac

Сохраните файл, например, как S90myapp, дайте права chmod +x /opt/etc/init.d/S90myapp и проверьте ручной вызов: /opt/etc/init.d/S90myapp start. Убедитесь, что первая строка — корректный shebang #!/bin/sh, а путь к бинарнику указан абсолютно: при загрузке переменная PATH может быть урезанной, и относительные пути не найдутся.

💡

Всегда используйте в init-скриптах абсолютные пути к бинарникам и конфигам — окружение при загрузке роутера минимально, и PATH может не включать /opt/bin.

FAQ: частые вопросы

Почему служба работает после ручного запуска, но не после перезагрузки?

Наиболее вероятные причины: прошивка не вызывает rc.unslung при старте, /opt не успел смонтироваться к моменту вызова, либо у скрипта нет прав на исполнение. Проверьте пункты из чек-листа выше по порядку.

Можно ли запустить скрипт без префикса S или K?

rc.unslung обрабатывает только файлы с именами S* и K*. Однако любой скрипт можно вызвать напрямую: /opt/etc/init.d/имя start — это работает независимо от имени файла.

Что означают цифры в имени скрипта, например S50?

Это порядковый номер запуска. Скрипты выполняются в алфавитном порядке, поэтому меньший номер стартует раньше. Цифры позволяют выстроить зависимости между службами.

Как остановить все службы Entware перед извлечением флешки?

Выполните /opt/etc/init.d/rc.unslung stop — будут вызваны скрипты K*, которые корректно завершат службы. После этого дайте команде sync завершить запись на накопитель и только потом отключайте его.

Одинаков ли механизм на разных прошивках?

Сам механизм /opt/etc/init.d и rc.unslung одинаков для Optware и Entware, но способ, которым прошивка вызывает rc.unslung при загрузке, различается. Уточняйте этот момент в документации конкретной прошивки.