Как остановить демона в linux
Перейти к содержимому

Как остановить демона в linux

  • автор:

Все о демонах в Linux

В среде Linux запуск демонов происходит во время загрузки. Поскольку система Linux является идеальным клоном Unix, процесс инициализации квалифицируется как родительский процесс для демона.

S Поскольку операционная система Linux характеризуется как многозадачная операционная система, демон по определению представляет собой программу, которая непрерывно выполняется в фоновом режиме. Короче говоря, выполнение этого процесса не зависит от активного взаимодействия пользователя с системой. Обычный системный пользователь не может контролировать периодическое выполнение процесса демона.

Соглашение об именах, которое определяет большинство процессов-демонов, — это одна буква «суффикс». d. Это соглашение об именах позволяет различать обычные системные процессы и процессы, управляемые демонами. Например, sshd это процесс-демон, отвечающий за управление входящимиSSH соединения. Другой пример процесса демона:syslogd. Он отвечает за средство ведения системного журнала Linux.

В среде Linux запуск демонов происходит во время загрузки. Поскольку система Linux является идеальным клоном Unix, процесс инициализации квалифицируется как родительский процесс для демона. Чтобы запускать и останавливать демонов в вашей операционной системе Linux, вам сначала нужно получить доступ к

Общие функции демонов

  • Это позволяет вашей системе правильно отвечать на сетевые запросы, связывая каждый запрос с совместимым сетевым портом. Типичный сетевой порт, обрабатываемый демонами, — это порт 80.
  • Демоны позволяют запускать или выполнять запланированные системные задачи. Демон, отвечающий за эту конкретную задачу, называется cron. Это создаст cron работа который будет обрабатывать периодическое выполнение ваших запланированных задач.
  • Демоны также предлагают бесценный вклад в мониторинг производительности вашей системы. Например, они могут проверить состояние RAID-массива или жесткого диска.

Полезные сервисные демоны Linux

  • amd: Демон автоустановки
  • анакрон: Выполнение отложенных задач cron во время загрузки
  • apmd: Демон расширенного управления питанием
  • atd: Использует функциональные возможности инструмента для выполнения заданий в очереди
  • autofs: работает рука об руку с демоном автомонтирования, чтобы упростить установку и демонтаж системных устройств по требованию.
  • crond: демон, который обрабатывает планирование задач
  • cupsd: демон, который обрабатывает печать CUPS
  • DHCP: демон для сервера протокола Internet Bootstrap и протокола динамической конфигурации хоста.
  • закрыто: демон маршрутизации, отвечающий за несколько протоколов маршрутизации. Заменяет routed и egpup
  • httpd: демон, который работает с веб-серверами, такими как Apache
  • inetd: демон, связанный с Internet Superserver
  • imapd: демон для сервера IMAP
  • lpd: Демон линейного принтера
  • memcached: демон кэширования объектов, распределенный в памяти
  • mountd: монтировать демон
  • MySQL: демон для сервера базы данных MySQL
  • по имени: демон для DNS-сервера
  • nfsd: Демон обмена сетевыми файлами
  • nfslock: Поскольку nfsd связан со службами блокировки файлов, этот демон может запускать и останавливать эти службы.
  • nmbd: демон для сетевого блока сообщений
  • ntpd: демон для службы протокола сетевого времени
  • постфикс: демон, который служит агентом почтового транспорта. Это альтернатива sendmail.
  • Postgresql: демон для сервера базы данных Postgres
  • направлено: демон для управления таблицами маршрутизации
  • rpcbind: демон, связанный с привязкой удаленного вызова процедур
  • Отправить почту: демон, который служит агентом пересылки почты
  • smbd: демон для Samba SMB сервера
  • smtpd: демон для простого протокола передачи почты
  • snmpd: демон для простого протокола управления сетью
  • Кальмар: демон, связанный с прокси-сервером для кэширования веб-страниц
  • sshd: демон, связанный с Secure Shell Server
  • синхронизация: демон для синхронизации системной памяти с системными файлами
  • Системный журнал: демон, который ведет системный журнал
  • tcpd: эта оболочка службы демона выполняет протоколы ограничения доступа, относящиеся к службам демона на основе inetd. Он реализует эти ограничения через hosts.allow и hosts.deny.
  • Telnetd: демон для telnet-сервера
  • vsftpd: демон для очень безопасного протокола передачи файлов
  • webmin: демон для веб-сервера администрирования
  • xinetd: демон, связанный с Enhanced Internet Supervisor
  • xntd: демон для сетевого сервера времени

Независимо от того, являетесь ли вы новичком, средним или опытным пользователем в мире операционной системы Linux, вы никогда не забудете ознакомьтесь с любым из вышеперечисленных демонов по мере развития своих навыков и опыта в этой ОС. окружающая обстановка.

Запуск / остановка / перезапуск демонов: терминальный подход

Теперь, когда у вас есть список полезных демонов Linux, которые нужно запомнить и изучить, первое, что вам нужно знать, это как запускать, останавливать или перезапускать эти демоны. Запустив терминал Linux, примите во внимание следующие правила синтаксиса для запуска, остановки и перезапуска демона в операционной системе Linux.

Заменить предпочтительное-имя-демона аргумент синтаксиса с именем системного демона Linux по вашему выбору. Вы можете выбрать его из списка демонов, выделенного выше, если он активен или уже определен в вашей системе Linux. Например, мы можем реализовать на практике вышеуказанный синтаксис, пытаясь запустить, остановить и перезапустить adaemon. Перейдите к /etc/init.d каталог на вашем терминале для получения списка доступных демонов в вашей системе Linux.

перечисление активных демонов в вашей Linux system.pngперечисление активных демонов в вашей Linux system.png как запустить, остановить и перезапустить службу демона в вашей системе Linux.pngкак запустить, остановить и перезапустить службу демона в вашей системе Linux.png

Список демонов вашей системы Linux

Более эффективный способ отметить доступные демоны в вашей системе Linux вместо перехода к /etc/init.d directory — вывести список всех определенных активных и неактивных демонов из этого каталога с помощью одной команды. Следующая команда эффективна для достижения этой цели.

перечисление всех демонов в вашей операционной системе Linux.pngперечисление всех демонов в вашей операционной системе Linux.png

Положительные [+] и отрицательные [-] в скобках знаки перед перечисленными именами демонов означают, что они либо активны, либо неактивны, соответственно.

Работа с пользовательскими демонами

Для успешного создания и реализации определенного пользователем демона необходимо соблюдать определенные правила или протоколы. Эти протоколы помогут вам полностью понять выполнение демонов в любой среде Linux. Демоны также достаточно гибки, чтобы взаимодействовать с модулями ядра через системные вызовы. Это расширение функциональности демона поддерживает его взаимодействие с аппаратными устройствами, такими как КПК (персональные цифровые помощники), принтеры и жизнеспособные внешние платы контроллеров. Строительные блоки демонов также вносят свой вклад в характерную мощность и гибкость операционной системы Linux.

Реализация связанного демона с использованием Python тщательно продемонстрирована и задокументирована Сандер Марешал . Следите за порядком выполнения при создании этого демона. Во-первых, ваша система Linux нуждается в установке пакетов Python для успешной разработки демонов. Чтобы установить Python, вы можете использовать следующую команду.

Ссылка на код демона authoredPython Сандера Марешала также предлагает усовершенствованную версию кода Python 3. Было бы полезно, если бы вы подумали о его реализации, чтобы лучше понять, как работают демоны.

Если вы не уверены, установлен ли у вас Python, выполните следующую команду на своем терминале Linux.

Цель любого демона

Поскольку один демон предназначен для обработки конкретной задачи, он должен выполнять ее безупречно. Рассматриваемая задача может быть такой же простой, как создание отчета и его отправка администратору через sendmail, или столь же сложной, как управление несколькими доменами, связанными с несколькими почтовыми ящиками. В какой-то момент демон, который вы собираетесь создать, должен будет взаимодействовать с другими существующими демонами.

взаимодействие пользователя с демоном

Не рекомендуется, чтобы системный пользователь и созданный демон взаимодействовали напрямую. Если это необходимо для демона, вы создаете его для связи с системным пользователем. Эту связь можно облегчить с помощью чего-то вроде графического интерфейса пользователя. Эта коммуникационная платформа может иметь сложный графический интерфейс GTK + или простоту набора сигналов.

Создание вашего демона

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

Вы можете сохранить код демона Python3, созданный Сандером Марешалом, в файле Python и демонизировать его с помощью приведенной выше команды. Хотя приведенная выше команда терминала легко создаст для вас демона, вам придется иметь дело с такими проблемами, как непредсказуемые выходные данные терминала. Эти проблемы зависят от того, насколько хорошо вы реорганизовали код демона Python. Кроме того, описанный выше подход не поддерживает назначение файлов блокировки PID определенным демонам. Это делает невозможным управление любым демоном, поскольку большинство из них будет выполняться мгновенно. С другой стороны, если вам нужен только простой демон, вышеупомянутый подход даст вам желаемые результаты демона.

Базовая структура демона

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

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 .

How to kill a daemon with its name gracefully?

But I am not sure if this command terminates the process gracefully. Does this command achieve graceful termination? If it does not, how can I kill a process with its name gracefully?

crisron's user avatar

3 Answers 3

Your question is not clear, you talk about a daemon in the title, but in the body only talk about a generic process.

For a daemon there are specific means to stop it, for example in Debian you have

Similar syntaxes exist for other initscript standards used in other distributions/OS.

To kill a non-daemon process, supposing it is in some way out of control, you can safely use killall or pkill , given that they use by default the SIGTERM (15) signal, and any decently written application should catch and gracefully exit on receiving this signal. Take into account that these utilities could kill more that one process, if there are many with the same name.

If that do not work, you can try SIGINT (2), then SIGHUP (1), and as a last resort SIGKILL (9). This last signal cannot be catched by the application, so that it cannot perform any clean-up. For this reason it should be avoided every time you can.

Both pkill and killall accept a signal parameter in the form -NAME , as in

IgorKa — Информационный ресурс

Немного обо всем и все о немногом, или практический опыт системного администратора.

Igorka

Январь 2010

Пн Вт Ср Чт Пт Сб Вс
« Дек Фев »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Лекция №25 — Управление демонами

Calendar4 января 2010, 18:04

Сегодня мы поговорим о процессах Linux, которые носят называние — демоны, а также посмотрим каким образом происходит управление демонами (или службами, если проводить параллель с Windows). Основное отличие процесса-демона от обычного пользовательского процесса, в том, что демон не имеет управляющего терминала, а соответственно взаимодействовать с ним пользователь может только посредством других программ или управляющих скриптов. Итак, в простейшем случае демон — это исполняемый файл или скрипт, который работает в фоновом режиме. Очень часто такие файлы заканчиваются на букву d (от daemon): sshd, httpd, cupsd — хотя это не обязательно.

Для того чтобы управлять демоном существует управляющий скрипт для каждого демона. Расположены такие скрипты, как правило, в каталоге /etc/init.d/. Именуются такие скрипты так как и сам демон (только без буквы d в конце), хотя это не является незыблемым правилом. Например, скрипт /etc/init.d/ssh управляет демоном sshd, который расположен в каталоге /usr/sbin/.

Что подразумевается под управлением демона? Это возможность выполнить определенные операции, такие как запуск демона, останов, перезапуск, принудительный останов и перезапуск, и некоторые другие. Поэтому запуская управляющий скрипт мы обязательно должны передать ему параметр, который описывает производимое с демоном действие. Эти параметры строго определены, а основные и наиболее часто встречающиеся это:

start — запуск демона
stop — останов демона
restart — перезапуск демона
reload — перезагрузка (перечитывание конфигурационных файлов) параметров демона
force-reload — принудительная перезагрузка параметров демона

Если вы сами будете писать подобный управляющий скрипт, то должны помнить, что он должен обрабатывать как минимум два параметра: start и stop. Можете открыть любой скрипт из директории /etc/init.d/ и увидеть, как посредством конструкции case реализована обработка управляющих параметров.

Итак, давайте попробуем остановить и запустить демон cron. Для этого в каталоге /etc/init.d/ находится управляющий скрипт /etc/init.d/cron:

Если запустить его без параметров (строка 1), то увидим подсказку какие параметры необходимо передавать этому скрипту (строка 2). Пробуем запустить с параметром stop (строка 3) и проверяем, что демон остановлен (строка 5). Затем запускаем демон (строка 6) и проверяем (строка 8). Таким же образом происходит управление другими демонами.

Давайте теперь посмотрим как происходит запуск демонов во время загрузки операционной системы Linux и во время ее остановки. Как вы должны помнить в Linux есть такое понятие как runlevel — уровень запуска системы. На каждом уровне запуска системы выполняются четко заданное количество демонов. При переходе с уровня на уровень, демоны, которые не должны работать — завершаются, а которые должны работать — запускаются. Для того чтобы указать системе какие демоны на каком уровне запуска должны стартовать или останавливаются в разных дистрибутивах существуют специально предназначенные для этого утилиты. Но мы сейчас посмотрим на сам механизм работы системы запуска демонов, чтобы понять ее суть.

В каталоге /etc есть каталоги с именем rcN.d, где N — это символ указывающий на runlevel к которому относится каталог. То есть имеем такие каталоги: rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d и rcS.d. Если посмотреть содержимое каталогов, то можно увидеть, что в них содержатся символические линки на скрипты из каталога /etc/init.d/:

Символические линки именуются в соответствии со следующим правилом: сначала идет латинская большая буква S или K, затем двузначное число и после этого точное называние скрипта на который ссылается символический линк. Буква K в имени линка означает, что скрипт на который он ссылается должен быть выполнен с параметром stop. То есть K11cron (строка 6) означает, что будет выполнена команда /etc/init.d/cron stop. То есть будет остановлен демон cron. Соответственно буква S означает, что скрипт на который указывает линк должен выполнится с параметром start. Двузначное число определяет порядок выполнения скриптов, а соответственно порядок запуска или завершения демонов. Первыми запускаются скрипты с меньшими номерами. Таким образом реализуется разрешение зависимостей скриптов (демонов). Например, демон cron должен быть остановлен только после того как будет остановлен демон apache2 (строки 6 и 3). Если у символических линков одинаковый номер, то это означает, что демоны не зависят друг от друга и скрипты могут выполняться в любом порядке. Также нужно отметить, что сначала выполняются все скрипты с буквой K, а затем только все скрипты с буквой S.

Как известно все пользовательские процессы (а демоны также к таковым относятся) начинаются с процесса init, а который последовательно читает файл /etc/inittab. Среди прочих в /etc/inittab есть следующие строки:

Когда системы переходит на какой либо runlevel, например, на шестой, то выполняется скрипт /etc/init.d/rc, которому в качестве параметра передается номер уровня запуска — 6. В результате своей работы скрипт /etc/init.d/rc начинает выполнять в соответствии с вышеописанными правилами все скрипты на которые есть символические ссылки в каталоге /etc/rc6.d/. Если упрощенно, то имя каждого символического линка преобразуется из вида K01gdm в /etc/init.d/gdm stop, а S10sysklogd в /etc/init.d/sysklogd start.

Таким образом если вы хотите, чтобы какой-то демон запускался (или останавливался) на нужном вам уровне вам нужно создать соответствующий символический линк в соответствующем каталоге /etc/rcN.d/. Например, если вы не хотите, чтобы демон cron запускался на всех уровнях значит из всех каталогов /etc/rcN.d/ необходимо удалить линк вида S80cron.

Если у вас есть свой собственный демон (например mydaemon c управляющим скриптом mydaemon) и вы хотите его запускать на 5-м уровне запуска значит в каталоге /etc/rc5.d/ вам необходимо создать символический линк:

/ linux$ sudo ln -s / etc / init.d / mydaemon / etc / rc5.d / S99mydaemon

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *