Запускать уровни только при запуске
Я нахожу концепцию уровней запуска очень запутанной. В настоящее время я пытаюсь запустить скрипт только при запуске. Но настройка, как показано ниже, приводит к тому, что он работает и во время остановки.
Я программирую демона следующим образом:
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" вызывается при остановке, все запускается снова.