- Имеем:
- Ubuntu 12.04
Пора написать шпаргалку по созданию сервисов в linux и установки последовательности их запуска и т.д.
Сервис - это обычная программа , скрипт .sh, .py (в общем все , что может выполняться)
1. Где он стартует?
/etc/init.d/(тут любое имя файла без расширения)
например /etc/init.d/mqttwarn (с правами -rwxr-xr-x)
внутри по-сути выполняется start-stop-daemon команда . Вот ее ключи
- Commands:
- -S|--start --
... start a program and pass to it - -K|--stop stop a program
- -T|--status get the program status
- -H|--help print help information
- -V|--version print version
- Matching options (at least one is required):
- -p|--pidfile
pid file to check - -x|--exec
program to start/check if it is running - -n|--name
process name to check - -u|--user
process owner to check
- Options:
- -g|--group
run process as this group - -c|--chuid
- change to this user/group before starting
- process
- -s|--signal
signal to send (default TERM) - -a|--startas
program to start (default is ) - -r|--chroot
chroot to before starting - -d|--chdir
change to (default is /) - -N|--nicelevel
add incr to the process' nice level - -P|--procsched
- use
with for the kernel - process scheduler (default prio is 0)
- -I|--iosched
use with to set the IO - scheduler (default prio is 4)
- -k|--umask
change the umask to before starting - -b|--background force the process to detach
- -m|--make-pidfile create the pidfile before starting
- -R|--retry
check whether processes die, and retry - -t|--test test mode, don't do anything
- -o|--oknodo exit status 0 (not 1) if nothing done
- -q|--quiet be more quiet
- -v|--verbose be more verbose
там можно посмотреть примеры других сервисов и тупо скопировать
2. Когда он стартует?
это устанавливается командой update-rc.d
update-rc.d [-n]
- или по русски
- update-rc.d [-n] имя start|stop NN уровень_запуска [уровень_запуска]... . start|stop NN уровень_запуска [уровень_запуска]... . ...
например sudo update-rc.d mqttwarn start 99 2 3 4 5 . stop 01 0 1 6 .
добавит такие ссылки для запуска:
- Adding system startup for /etc/init.d/mqttwarn ...
- /etc/rc0.d/K01mqttwarn -> ../init.d/mqttwarn
- /etc/rc1.d/K01mqttwarn -> ../init.d/mqttwarn
- /etc/rc6.d/K01mqttwarn -> ../init.d/mqttwarn
- /etc/rc2.d/S99mqttwarn -> ../init.d/mqttwarn
- /etc/rc3.d/S99mqttwarn -> ../init.d/mqttwarn
- /etc/rc4.d/S99mqttwarn -> ../init.d/mqttwarn
- /etc/rc5.d/S99mqttwarn -> ../init.d/mqttwarn
- удаление ссылок запуска
- update-rc.d [-n] [-f] имя remove
В общем-то и вся идея.
/etc/init.d/ Каталог, содержащий действующие сценарии инициализации.
/etc/rc?.d/ Каталоги, содержащие ссылки, используемые init и управляемые update-rc.d.
/etc/init.d/skeleton Модель, используемая для написания сценариев init.d.
http://manpages.ylsoftware.com/ru/update-rc.d.8.html
У меня возникла одна нерешимая проблема с сервисами. Установил mosquitto mqttwarn , запускаю как сервис. mqttwarn по датчику движению запускал guvcview и показывал на экране видео с камеры. Так вот при запуске от обычного пользователя в Десктопе (под X Window) guvcview запускается , а вот когда как сервис стартует (от root) вообще ничего.