Я знаю, что этот вопрос задавался несколько раз, но я просто не могу заставить его работать.

Вот шаги, которые я предпринял, чтобы заставить это работать:

  1. написанный скрипт сохранен как collection.sh
  2. перемещен collection.sh в /etc/init.d
  3. выполнил $ sudo chmod 711 /etc/init.d/collection.sh чтобы установить разрешения для выполнения скрипта
  4. выполнил $ ln -s /etc/init.d/collection.sh /etc/rc0.d/ чтобы создать символическую ссылку в /etc/rc0.d
  5. перезагрузил машину с $ sudo reboot

Эти шаги не увенчались успехом при запуске collection.sh при запуске. Так кто-нибудь может указать, что я сделал не так?

Я подумал, что, возможно, я создаю символическую ссылку в неправильной папке rc?.d как есть папки 0-6 и S rc . Если да, то в какую папку его следует поместить?

3 ответа3

0

Трудно понять, почему это не работает без просмотра вашего сценария, но шаги, которые вы предприняли, выглядят разумно.

Некоторые возможности, объясняющие неудачу, могут быть

  • У вас нет что-то вроде #!/bin/bash в качестве первой строки скрипта
  • Вы полагаетесь на пути к двоичным файлам, которые не были настроены.
  • Ваш сценарий не учитывает, что сценарии запуска передают такие параметры, как запуск, остановка, перезагрузка и т.д.

Еще один метод запуска скрипта при запуске (для большинства дистрибутивов) - просто добавить его в /etc/rc.local - это дает дополнительное преимущество, заключающееся в запуске last, поэтому предварительные условия будут выполнены.

0

Символические ссылки должны начинаться с трехсимвольной клавиши, состоящей из «S» для запуска или «K» для уничтожения / остановки, за которым следует двузначный порядок.

Большинство дистрибутивов включают в себя программу, такую как update-rc.d которая будет создавать и удалять символические ссылки по желанию. Попробуйте команду man -k rc.d чтобы найти документацию.

У вас может быть шаблон в вашем каталоге /etc/init.d . Он может содержать специально отформатированные комментарии, предназначенные для предоставления параметров для программы обновления rd.d. Если у вас нет шаблона, скорее всего, у вас есть простой скрипт, который вы можете использовать в качестве шаблона.

Некоторые дистрибутивы переходят на альтернативные методы выполнения инициализации. Проверьте вашу документацию по дистрибутивам.

0

Вы делаете 3 вещи неправильно, что я вижу.

Во-первых: вы хотите поместить вашу мягкую ссылку в /etc/rcS.d/ чтобы она работала, когда машина переходит в режим "однопользовательский" (нет доступных сетей), и в /etc/rc[2-5].d/ чтобы он работал, когда машина переходит в "многопользовательский" режим (уровни запуска от 2 до 5). Уровень запуска 0 /etc/rc0.d/ только в том случае, если машине приказано отключиться . Уровень запуска 6 используется для "перезагрузки". Смотрите страницу википедии по уровням выполнения UNIX

Второе: имя программной ссылки не может быть collection.sh . Он должен иметь форму S09collection где "S" означает « Старт», а "09" означает « Старт» после запуска всех сценариев 08 . Смотрите здесь для более подробной информации.

Третье: init используется для запуска сервисов демона и не должен использоваться для непосредственного запуска collection.sh. Вам необходимо создать настоящий скрипт инициализации, который обрабатывает запуск и остановку демона collection.sh. Изучите существующие сценарии инициализации в /etc/init.d/ чтобы понять, как они работают. В качестве альтернативы взгляните на следующие ссылки для получения дополнительной документации по написанию сценариев инициализации.

  • Вот как писать сценарии инициализации, совместимые с LSB. Это рекомендуется для LSB-совместимых дистрибутивов Linux. Я заметил, что вы пометили свой вопрос "ubuntu", поэтому я должен отметить, что Ubuntu (как и все дистрибутивы на основе Debian) совместим с LSB.
  • Вот вики-руководство Debian по созданию сценариев инициализации, совместимых с LSB.
  • Вот "Быстрое и грязное", как использовать сценарии инициализации в стиле System V.
  • Вот шаблон для сценария инициализации в стиле System V на Github.

Кроме того, вам не нужно создавать символические ссылки непосредственно в папках /etc/rc?.d . Все основные дистрибутивы имеют автоматизированные инструменты для этого. Смотрите эту статью для более подробной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .