Команда /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
⚠️ Внимание: командыchmodи правка скриптов выполняются от root. Ошибка в стартовом скрипте может «подвесить» загрузку служб или оставить службу неработающей — перед правкой делайте копию файла, напримерcp S50dropbear S50dropbear.bak.
Типовые ошибки и их признаки
Практика показывает несколько повторяющихся сценариев, из-за которых связка 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 при загрузке, различается. Уточняйте этот момент в документации конкретной прошивки.