- Линукс как запустить демон
- START-STOP-DAEMON¶
- НАЗВАНИЕ¶
- СИНТАКСИС¶
- ОПИСАНИЕ¶
- ОКРУЖЕНИЕ¶
- ПРИМЕЧАНИЕ¶
- СМ. ТАКЖЕ¶
- ОШИБКИ¶
- ИСТОРИЯ¶
- start-stop-daemon
- Содержание
- Основы
- Запуск демона
- Остановка демона
- Работа с pid-файлами
- Прочие возможности
- Передача параметров запускаемой программе
- Власть над демонами или автозапуск в Linux
Линукс как запустить демон
Есть два демона SMB — /usr/sbin/smbd и /usr/sbin/nmbd . В большинстве дистрибутивов Linux , они запускаются, останавливаются и перезапускаются через стартовый скрипт, расположенный в /etc/rc.d/init.d/smb , на который созданы символьные ссылки с соответствующих уровней запуска.
Если Вы не будете использовать стандартные стартовые скрипты, то можете запустить демоны Samba из inetd или как автономные процессы. Samba будет «отвечать» чуть быстрее когда она запущена как автономный процесс, чем в случае, когда она запусчена из inetd . В некоторых случаях нужно проверить наличие в файле /etc/services примерно таких строк:
Убедитесь, что все они не закомментированы. В зависимости от дистрибутива, может понадобиться вообще добавить их в этот файл. Samba не сможет привязаться к соответствующим портам пока этих строк не будет в файле /etc/services .
Для запуска демонов из inetd , поместите следующие строки в конфигурационный файл inetd , /etc/inetd.conf :
Затем перезапустите демон inetd выполнив команду:
Для запуска демонов из системных стартовых скриптов, поместите следующий скрипт в файл /etc/rc.d/init.d/smb (для большинства дистрибутивов) и создайте на него символические ссылки с именами, указанными в комментариях:
Если при старте Samba Вы получаете сообщение в котором говорится, что демон не может подключится к порту 139 , то вероятно уже есть запущенные процессы Samba, которые не были завершены. Посмотрите список процессов (используя команду ps auxww | grep mbd ) для того, чтобы определить есть ли еще запущенные сервисы Samba.
Источник
START-STOP-DAEMON¶
НАЗВАНИЕ¶
start-stop-daemon — обеспечение запуска и остановки демонов
СИНТАКСИС¶
start-stop-daemon -S , -start демон [—] [аргументы ] start-stop-daemon -K , -stop демон start-stop-daemon -s , -signal signal демон
ОПИСАНИЕ¶
Утилита start-stop-daemon обеспечивает надежный метод запуска и остановки демонов, а также передачи им сигнала. Если не используется ни опция -K , -stop, ни -s , -signal, подразумевается, что демон необходимо запустить. Если демон не запускается самостоятельно в фоновом режиме и не создает файл идентификатора процесса, это может безопасно выполнить start-stop-daemon.
Если start-stop-daemon используется для той или иной службы OpenRC, OpenRC может проверить, работает ли демон. Если нет, то служба помечается как аварийно остановленная.
Ниже приводятся опции, служащие для указания демона и способа его запуска или остановки:
-x , -exec демон
Запускаемый или останавливаемый демон. Если эта опция не указана, то будет использован первый аргумент вне опций.
-p , -pidfile файл идентификатора процесса
При запуске демона он за разумное время должен создать рабочий файл идентификатора процесса. При остановке будут остановлены только процессы, перечисленные в файле идентификатора.
-n , -name имя
Определяет демон по имени процесса, а не по файлу идентификатора или по имени исполняемого файла.
-i , -interpreted
При выборе процесса по имени необходимо убедиться, что ему соответствует подходящий интерпретатор. Как только, например, запускается демон foo, start-stop-daemon ищет процесс. Если интерпретируемый демон изменяет свое имя процесса, это не будет работать.
-u , -user пользователь [:группа ]
Запускает демон от пользователя и соответственно обновляет значение $HOME или останавливает демоны, принадлежащие пользователю. При желании вы можете добавить и группу.
-t , -test
Только отображает сведения о действии/-ях, которые должны быть выполнены, ничего не делая. Возвращается то же значение, что и в случае действительно запуска и отработки команды.
-v , -verbose
Отображает сведения о действии/-ях непосредственно перед его/их выполнением.
-P , -progress
Отображает ход выполнения в консоли: одна точка обозначает секунду ожидания.
Следующие опции используются только при запуске демонов:
-a , -startas имя
Заменяет имя процесса демона на указанное имя. Это заменит лишь первый аргумент, передаваемый демону.
-b , -background
Принудительно запускает демон в фоновом режиме. Некоторые демоны не создают идентификационных файлов — их удобно запускать в фоне и использовать эту опцию в связке с -m , -make-pidfile для создания рабочего файла идентификатора.
-d , -chdir путь
Перед запуском демона изменяет рабочий каталог на указанный.
-r , -chroot путь
Перед запуском демона выполняет chroot в каталоге по указанному пути. Другие пути, например, путь доступа к демону, адрес нового корневого каталога root и файла идентификатора процесса, должны быть относительными к chroot.
-c , -chuid пользователь
Аналогично опции -u , -user.
-e , -env VAR=VALUE
Присваивает переменной окружения VAR значение VALUE.
-g , -group группа
Запускает демон в группе.
-k , -umask режим
Задает маску файла демона.
-m , -make-pidfile
Сохраняет идентификатор процесса демона в файле, указанном в опции -p, -pidfile. Имеет смысл только применительно к демонам, запущенным в основном режиме, которые принудительно переводятся в фоновый режим опцией —b, -background.
-I , -ionice класс [:данные ]
Изменяет приоритет ввода-вывода для демона. Аргумент класс может иметь значение 0 — нет, 1 — real time (приоритетный доступ), 2 — best effort (приоритет определяется планировщиком) и 3 — idle ( доступ только тогда, когда другие процессы не требуют ввода/вывода). Аргумент данные может принимать значения от 0 до 7 включительно.
-N , -nice уровень
Изменяет приоритет запуска демона.
-1 , -stdout журнал
При запуске с опцией -background перенаправляет стандартный вывод процесса в журнал. В качестве аргумента необходимо указывать абсолютный путь доступа к файлу, но относительный к пути, опционально заданному опцией -r , -chroot. Журнал может быть и именованным каналом.
-w , -wait время
После запуска ожидать указанное время (в миллисекундах), затем проверить, продолжает ли демон работу. Эта опция удобна для демонов, которые проверяют конфигурацию после ветвления или устранения «гонок», когда файл идентификатора записывается после ветвления процесса.
-2 , -stderr журнал
Эта опция аналогична -1, -stdout, но со стандартным выводом ошибок.
Следующие опции используются только для остановки демонов:
-R , -retry пауза | сигнал / пауза
Вы можете указать либо продолжительность паузы в секундах, либо несколько пар сигнал/пауза для расписания остановки демонов. Если опция не задана, будет использовано значение по умолчанию SIGTERM/5.
ОКРУЖЕНИЕ¶
С помощью переменной_SSD_NICELEVEL_ также можно устанавливать очередь запуска демонов, но приоритет будет иметь опция в командной строке.
Переменная SSD_STARTWAIT аналогична опции -w, -wait, описанной выше. /etc/rc.conf, start-stop-daemon ожидает проверки, продолжает ли демон работу.
ПРИМЕЧАНИЕ¶
Для синтаксического анализа опций start-stop-daemon использует getopt(3): этот инструмент позволяет принимать опцию с префиксом `—‘, останавливая обработку текущих опций на данном этапе. Все последующие аргументы передаются демону, который запускает соответствующие службы, и используются при обнаружении демона, который необходимо остановить или которому необходимо передать сигнал.
СМ. ТАКЖЕ¶
chdir(2), chroot(2), getopt(3), nice(2), rc_find_pids(3)
ОШИБКИ¶
Не обращаясь к файлу идентификатора процесса, start-stop-daemon не может остановить интерпретируемый демон, который уже не существует.
ИСТОРИЯ¶
Впервые start-stop-daemon был использован в Debian.
Настоящая реализация стала результатом полной переработки изначальной версии: процесс ищет код в библиотеке OpenRC (librc, -lrc), чтобы к нему могли обращаться другие программы.
Источник
start-stop-daemon
Содержание
В этой статье будет рассмотрено использование start-stop-daemon . Данная утилита идет в составе dpkg и, следовательно, присутствует в любой системе на базе Debian/Ubuntu.
Ее функция следующая: она позволяет запустить любой процесс в виде демона, то есть в фоне. Это нужно для того, чтобы запускать в фоне те процессы, которые сами не умеют уходить в фон. Запуск процесса в виде демона позволит не держать постоянной открытой tty-консоль или вкладку в терминале, а также даст больше возможностей для контроля данного процесса.
Основы
Как упомянуто выше, основное предназначение — запуск программ в фоновом режиме. В качестве примера будет взят museekd , демон-клиент для p2p-сети soulseek. start-stop-daemon имеет два обязательных параметра: -S (или –start ) и -K ( –stop ), один из которых должен присутствовать в любой команде. Далее следуют параметры, указывающие, что и как запустить.
Запуск демона
Для того, чтобы запустить демон необходимо помимо ключа -S указать так же исполняемый файл – /usr/bin/museekd . Исполняемый файл задается ключом -x
Однако, в фон программа не уйдет и вы увидите на экране ее вывод. Для того, чтобы процесс уходил в фон, нужно добавить ключ -b . Заодно добавьте ключ -v для отображения диагностических сообщений
Программа запустится и будет работать в фоне. Для взятого примера этого достаточно.
Остановка демона
Для остановки процесса нужно указать ключ -K , т.е. действие «стоп», а так же сам процесс, который нужно остановить. Процесс для остановки так же указывается по исполняемому файлу, с помощью ключа -x
start-stop-daemon найдет процесс museekd и остановит его (по умолчанию — отправив SIGTERM).
Работа с pid-файлами
Если вы хотите запустить несколько копий одной программы, следует использовать pid-файлы 1) для управления такими процессами. Для запуска museekd с созданием pid-файла следует использовать ключ -p . Пример:
Здесь также появился ключ -m , указывающий утилите start-stop-daemon, что pid-файл нужно создать при запуске программы. Некоторые программы умеют создавать pid-файлы самостоятельно – в этом случае данный ключ не нужен.
Теперь в заданном файле записан PID запущенного процесса. Зная его, вы можете отличить его от других копий той же программы, найти процесс, к примеру, в top и сделать с ним что-либо (например, изменить приоритет или остановить).
Для остановки процессов также можно использовать pid-файлы, чтобы остановить конкретный процесс. При этом указание исполняемого файла не требуется, нужно лишь задать действие «стоп» и pid-файл
start-stop-daemon прочитает PID из заданного файла, проверит, есть ли такой процесс и остановит его.
Прочие возможности
Передача параметров запускаемой программе
Если запускаемой программе нужно передать какие-либо параметры, они отделяются двумя дефисами. Все, что идет далее, не воспринимается как параметры для start-stop-daemon, а передается запускаемой программе в неизмененном виде. Пример запуска museekd с альтернативным файлом конфигурации:
Данная конструкция запустит museekd -c .museekd/config.new . Двойной дефис и следующие за ним параметры не обязательно располагать после исполняемого файла. Главное – в конце комманды.
Утилита start-stop-daemon имеет гораздо больше возможностей, чем описано в данной статье. Например, она позволяет запустить процесс от имени другого пользователя или даже в chroot-окружении, задать приоритет процесса, изменить сигнал остановки (например, использовать SIGKILL вместо SIGTERM) и т. п. Больше информации можно получить из man start-stop-daemon и start-stop-daemon –help .
Источник
Власть над демонами или автозапуск в Linux
Для реализации автозапуска в Linux написано уже немало и на разных языках, но приходится искать, потому постарался свести большую часть тут. Здесь не рассказывается полностью весь процесс с нуля, но предоставлено достаточно информации и ссылок, чтобы сделать атоматический запуск программ в Linux реальностью.
Стоит сразу заметить — чтобы программа была полноценным сервисом/демоном, она должна быть соответствующе написана (link1, link2). Впрочем такое делают не всегда, хотя возможно это и не совсем правильно.
Существуют несколько способов сделать автозапуск программ в Linux:
- записать вызов программы/скрипта запуска в /etc/rc.local в фоновом режиме (&) (в разных дистрибутивах может лежать в разных местах, например, /etc/rc.d/rc.local) с перенаправленными потоками ввода/вывода в /dev/null. Например, «/home/user/my_prog 1 > /dev/null 2 > /dev/null &». Также, дополнительно, можно воспользоваться командой nohup;
- внести вызов в /etc/inittab, согласно правилам его оформления. В отличие от первого способа тут можно указать уровень запуска для программы;
- написать скрипт, позволяющий запускать/останавливать/перезапускать программу как демона, а также получать информацию о её состоянии.
Первый способ самый лёгкий, но и самый проблемный. Файл rc.local есть не во всех дистрибутивах. В нём нельзя задать уровень запуска. Если там записано несколько программ, то сложно ими управлять как сервисами (разве что запустить или остановить все одновременно). И, под конец, запуск из него подрывает устойчивость системы от взлома (примеры можно легко найти в поисковике).
Второй метод довольно экзотичный, сам узнал о нём совсем недавно, хотя пишут, что им пользуются многие администраторы. Тем не менее, используя его, нельзя оперировать запущенными таким способом программами как демонами, что довольно неудобно. Да и загромождать inittab некрасиво.
Последний метод на текущий момент самый «кошерный», но немного сложнее предыдущих (возможно, на первый взгляд). Именно им представлены все системные демоны, что говорит само за себя. Потому его и рассмотрю ниже.
Также есть способ автозапуска графических программ, но его опишу в конце, отдельно от остальных, т.к. он имеет недемоническую сущность.
Сразу обмолвлюсь, что у меня стоит Debian 6 и в других дистрибутивах пути могут несколько различаться.
Автозапуск программы как демона
Обычно в системе уже есть много подсказок как это сделать, но всё-таки приходится лазить по разным файлам и искать в интеренете дополнительную информацию. Это не значит, что я опишу тут каждую букву, но искать придётся меньше, надеюсь.
Для начала стоит заглянуть в каталог /etc/init.d. Здесь содержатся запускные скрипты всех сервисов, а также два файла для желающих написать себе такой же:
README и skeleton
skeleton содержит в себе болванку скрипта запуска с довольно подробными комментариями, а README его неплохо дополняет, не смотря на его небольшой размер. Также можно посмотреть и другие файлы и попытаться найти там что-то, что прояснит непонятную ситуацию.
В 6-ом debian`е для запускных скриптов демонов используется LSB (Linux Script Base) Init Standart. Почитать о нём подробнее можно тут. Для систем, где LSB не используется стоит взглянуть сюда.
Рассмотрим поближе файл skeleton. Первое с чего он должен начинаться, конечно же «#!/bin/sh», т.к. init-скрипт — запускной файл. Далее идёт комментированный заголовок:
Может показаться, что это просто лишняя информация от автора, но это не так. То, что указано здесь используется при прописывании скрипта в систему. Тут как раз пригодится файл README, который показывает, что в заголовке skeleton перечислены не все возможные параметры. Как минимум есть ещё следующие:
Все параметры и их полное описание (на английском) можно увидеть тут, а на русском тут и тут (спасибо awzrno за новые ссылки ^_^). К русскому варианту добавлю, что в Required-Start: можно прописать $all, тогда текущий скрипт будет запускаться после всех остальных (иногда это бывает нужно). Также X-Interactive: true показывает, что этот скрипт может взаимодействовать с пользователем, запросом на ввод чего-нибудь, например пароля.
Далее в skeleton идёт инициализация переменных, используемых в самом скрипте. Часть из них нужно будет настроить под свои нужды. Потом проверки на то, что сам демон существует и попытка прочитать конфигурационный файл (их имена должны быть указаны в переменных выше), далее загрузка переменных rcS, а потом идёт одна из самых интересных частей init-файла:
. /lib/lsb/init-functions
это определение LSB функций работы с логами, LSB-статусом сервиса, работы с процессом. В некоторых дистрибутивах этот файл может находиться в каталоге /etc/init.d. Названия и часть подробностей можно узнать непосредственно из комментариев к функциям в этом файле, а также тут.
Следующая часть — непосредственно тело скрипта. Тело состоит из условных частей, которые являются командами для демона: start, stop, restart/reload/force-reload, status. Кто-то выделяет их в отдельные функции, кто-то нет. На мой взгляд, функциями они выглядят эстетичнее и код более понятен. Все эти команды объединяет оператор выбора case, который и выбирает для исполнения нужный кусок кода, в зависимости от команды (параметра) с которой был запущен init-скрипт.
Таким образом для создания обычного скрипта достаточно подставить в переменные в начале файла нужные значения и, возможно, немного добавить кода в функции start/stop (например загрузку/выгрузку драйвера).
После того как файл будет готов его нужно скопировать в /etc/init.d и добавить в автозагрузку:
update-rc.d defaults
(или insserv для debian 6 stable и выше)
Удалить из автозагрузки можно так:
update-rc.d -f remove
(или insserv -r для debian 6 stable и выше)
Далее также можно использовать команды sysv-rc-conf в debian или service в fedora core, чтобы включить/выключить автозагрузку сервиса.
Автозапуск графического ПО без ввода паролей
Сама по себе реализация такой возможности понижает уровень защищённости ОС, т.к. войти может любой. Но бывают ситуации, когда это необходимо. Рассмотрю тут варианты только для двух основных графических менеджеров, т.к. других установленных под рукой нет.
Убрать запрос пароля на вход можно в центре управления (kcontrol) -> системное администрирование -> менеджер входа в систему -> удобства. Там выбрать пользователя, под которым входить (кроме рута) и поставить нужные галочки (разрешить автовход и вход без ввода пароля).
Чтобы сделать автозапуск программы нужно в каталог /home/ /.kde/Autostart добавить ссылку на запускной файл/скрипт нужного ПО.
Тут убрать запрос пароля на вход можно также в центре управления (gnome-control-center) -> Login Screen. Там, под рутом (ткнуть на замок, ввести пароль) выбрать пользователя, под которым входить (кроме суперпользователя).
Для автозапуска программы опять же в центре управления выбрать Startup Applications -> Add и заполнить маленькую форму.
Для обоих графических менеджеров:
Если нужно запустить под обычным пользователем, но от рута, то ещё надо настроить правила в /etc/sudoers на запуск конкретной программы/набора программ от имени суперпользователя (манами рекомендуется для безопасности делать это с помощью visudo). Как это делать рассказывать не буду, т.к. в man sudoers всё хорошо расписано.
Источник