Запускать уровни только при запуске

Я нахожу концепцию уровней запуска очень запутанной. В настоящее время я пытаюсь запустить скрипт только при запуске. Но настройка, как показано ниже, приводит к тому, что он работает и во время остановки.

Я программирую демона следующим образом:

update.rc-d script.sh defaults 100

Также я попробовал

update-rc-d script.sh start 100

Но это тоже не работает.

2 ответа

Решение

Уровни выполнения - это логические группы задач. Традиционно у вас есть пять уровней запуска.

0 boot
1 single user 
2 not used
3 multiuser
4 not used 
5 gui
6 reboot 

Каждый уровень запуска определяет более или менее статический набор задач для запуска. Уровень запуска 1 может не иметь сети, тогда как уровень запуска 3 может не иметь экрана входа в систему GUI. Система проходит все нижние уровни выполнения, прежде чем достигнет уровня запуска по умолчанию. Для типичного Ubuntu-бокса традиционный уровень запуска - 5: GUI, в то время как другие дистрибутивы, такие как Debian или Gentoo, могут быть настроены для запуска 3: multiuser в качестве уровня запуска по умолчанию.

В последних версиях Ubuntu эта модель несколько изменилась, поскольку предыдущий способ запуска системы не позволял запускать несколько служб (программ) параллельно. Без сомнения, были и другие причины.


Если я правильно понимаю вашу цель, вам нужно выполнить одну команду. Вы можете сделать это, поместив его вместе с любыми другими командами, которые вы можете иметь в файле /etc/rc.local:

$ chmod 755 /etc/rc.local 

Система Init не будет запускать этот файл без битов выполнения

$ cat /etc/rc.local
#!/bin/sh -e
# This script is executed at the end of each multiuser runlevel.

loadkeys  /root/jolemak.iso15.kmap
exit 0

Любой многопользовательский уровень выполнения означает любой уровень выполнения выше 3. В этом примере выполняется одна команда для загрузки альтернативной раскладки клавиатуры для виртуальных консолей. Это быстрый способ исправить макет, прежде чем я пойму, как правильно установить и настроить дополнительные макеты.


Если вам нужно выполнить более сложную работу, напишите традиционный скрипт /etc/init.d/foo или новый upstart (для Ubuntu) /etc/init/moo.conf. Изучите примеры в этой папке и прочитайте вики для получения дополнительной информации.

https://help.ubuntu.com/community/UbuntuBootupHowto
http://upstart.ubuntu.com/getting-started.html
http://upstart.ubuntu.com/cookbook/

На ваш вопрос также ответили здесь: http://upstart.ubuntu.com/cookbook/ и здесь http://www.debuntu.org/how-to-managing-services-with-update-rc-d/

http://www.netbsd.org/docs/guide/en/chap-rc.html описывает, как должен работать ваш скрипт. Ваш сценарий будет запускаться при запуске, завершении работы и каждый раз, когда пользователь запускает "service yourscriptname". Вы должны указать своему сценарию проверить его первый и единственный параметр. Если этот параметр "start", запустите службу или сделайте все, что делает ваш скрипт. Если этот параметр "стоп", то остановите службу или ничего не делайте. Как вы справляетесь с "перезагрузкой" и "состоянием" - решать вам. Прямо сейчас ваш сценарий игнорирует этот параметр, поэтому, когда "script.sh start" вызывается при запуске, все хорошо, но когда "script.sh stop" вызывается при остановке, все запускается снова.

Другие вопросы по тегам