Linux проверить запущен ли демон

Обновлено: 05.07.2024


Мы используем systemctl status команду под systemd для просмотра статуса данной службы в операционных системах Linux..

Просмотр статуса сервиса:

Синтаксис команды systemctl следующий
systemctl status
systemctl status

Как просмотреть статус службы под названием nginx

Точка (« ● ») использует цвет на поддерживаемых терминалах, чтобы быстро обозначить состояние устройства. Белый цвет указывает на «неактивное» или «деактивированное» состояние. Красный цве т указывает на состояние «сбой» или «ошибка». Зеленый цвет указывает на состояние «активное», «перезагрузка» или «активация».

Понимание состояний службы / модулей systemd

Статус службы Linux зависит от различных состояний, таких как:

В настоящее время systemd поддерживает следующие модули

Мы можем перечислить все сервисные единицы следующим образом:
$ sudo systemctl --type=service
Хотите увидеть единицы типа монтирования? Попробуйте:
$ sudo systemctl --type=mount
Отобразить все блоки таймера systemd в вашем Linux:
$ sudo systemctl -t timer

Чтобы показать все установленные файлы модулей, используйте:

$ sudo systemctl list-unit-files


Linux просмотр статуса службы

Введите следующую команду, чтобы просмотреть все службы и состояние модулей в вашей системе Linux с момента загрузки:
$ sudo systemctl



Как вывести список модулей, которые systemd в настоящее время имеет в памяти

Выполните следующую команду:
$ sudo systemctl list-units
$ sudo systemctl list-units | more
$ sudo systemctl list-units | grep sshd

$ sudo systemctl list-units --type service
$ sudo systemctl list-units --type timer

Список systemd/systemctl всех отказавших модулей units/services в Linux

$ sudo systemctl list-units --failed
$ sudo systemctl list-units --state failed

$ sudo systemctl list-units --state failed --type service
$ sudo systemctl list-units --state failed --type timer

Что делать, если такой сервис, как nginx, не запущен?

Как просмотреть источник файла службы / модуля systemd

Передайте параметр cat следующим образом:
$ sudo systemctl cat
$ sudo systemctl cat nginx.service

Вывод

Вы узнали о перечислении модулей systemd, включая службы Linux, с помощью команды systemctl. См. Документацию по systemctl или введите следующую команду man:

Из моего вопроса стало ясно, что я не могу легко определить функции демона. Я читал в разных статьях и на разных форумах, что эту service --status-all команду можно использовать для вывода списка всех демонов в моей системе. Но я не думаю, что команда перечисляет все демоны, потому NetworkManager что демон, который в данный момент работает в моей Ubuntu 14.04 системе, не указан командой. Есть ли какая-нибудь команда для вывода списка запущенных демонов, или есть какой-то способ найти демонов из самого filesystem себя?

Вы уверены, что его нет в списке? Как вы проверяете? Я вижу это на своем Debian. Обратите внимание, что имя network-manager не NetworkManager . Да. Я уверен. Ничто, связанное с термином сеть, не перечислено. Также он перечисляет, anacron что упоминается как не демон в своем скрипте инициализации. Anacron не является демоном, это больше вопрос семантики, потому что он не запускается постоянно. Он по-прежнему работает как служба, которую вы обычно называете демонами. Пожалуйста, отредактируйте свой вопрос, и я) скажите нам, какой Ubuntu вы используете, и ii) что именно вы подразумеваете под "демоном". Какова ваша конечная цель здесь? Я полагаю, что любой сервис, работающий в фоновом режиме, является демоном. Я упомянул, anacron потому что было сказано, /etc/init.d/anacron что это не демон. Моя цель - написать C++ программу для перечисления всех демонов, работающих в моей системе. Для этого мне нужно знать, какие файлы анализировать, чтобы получить детали. Хорошо, если вы определяете демонов как сервисы, service --status-all это то , что вам нужно. Ubuntu, похоже, относится к NetworkManager по-другому. Я получаю оба networking и network-manager в выводе services --status-all на Debian, но только networking на Ubuntu. Я думаю, вам нужно определить, что именно вы подразумеваете под "демоном".

Понятие демона привязано к процессам , а не к файлам . По этой причине нет смысла «находить демонов в файловой системе». Просто, чтобы сделать понятие немного яснее: программа представляет собой исполняемый файл (видимый в выводе ls ); процесс - это экземпляр этой программы (видимый в выходных данных ps ).

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

Поле tty вывода содержит «?» когда процесс не имеет управляющего терминала.

Большая проблема возникает тогда, когда ваша система работает в графической среде. Поскольку программы с графическим интерфейсом (например, Chromium) не подключены к терминалу, они также появляются в выходных данных. В стандартной системе, где root не запускает графические программы, вы можете просто ограничить предыдущий список процессами root. Это может быть достигнуто с помощью ps " -U переключателя.

Тем не менее, здесь возникают две проблемы:

  • Если root запускает графические программы, они будут отображаться.
  • Демоны, работающие без прав root, не будут. Обратите внимание, что демоны, которые запускаются во время загрузки, обычно работают от имени пользователя root.

По сути, мы хотели бы отобразить все программы без управляющего терминала, но не программы с графическим интерфейсом . К счастью для нас, есть программа для отображения процессов графического интерфейса xlsclients :! Этот ответ от slm говорит нам, как использовать его для вывода списка всех программ с графическим интерфейсом, но нам придется изменить его, так как мы хотим исключить их. Это можно сделать с помощью --deselect переключателя.

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

Теперь ps есть -C переключатель, который позволяет нам выбирать по имени команды. Мы только что получили наш список команд, поэтому давайте добавим его в ps командную строку. Обратите внимание, что я использую --deselect впоследствии, чтобы отменить мой выбор.

Теперь у нас есть список всех процессов без графического интерфейса. Давайте не будем забывать наше правило "нет связи с TTY". Для этого я добавлю -o tty,args к предыдущей строке, чтобы вывести tty каждый процесс (и его полную командную строку):

Финал grep захватывает все строки, которые начинаются с «?», То есть все процессы без контролируемого tty. И вот, пожалуйста! Эта последняя строка дает вам все не-GUI процессы, запущенные без управляющего терминала. Обратите внимание, что вы все еще можете улучшить его, например, исключив потоки ядра (которые не являются процессами) .

Список распространенных UNIX/LINUX демонов, в ОС Windows называются службами, которые могут использоваться в разных UNIX/LINUX модификациях. Имена UNIX/LINUX демонов в окончании часто содержат букву d как сокращение от англ. daemon. Проверить запущен ли процесс/демон можно командой top или ps aux .

Ниже представлен список имён самых распространенных демонов и их краткое описание. Приведённый ниже список UNIX/LINUX демонов не является полным/исчерпывающим и в вашей UNIX/LINUX системе один, все или несколько из них могут быть в наличии или же отсутствовать в зависимости от версии/типа/модификации/конфигурации вашей UNIX/LINUX системы и установленного на ней ПО.

По умолчанию в демоне init определенно 7 уровней выполнения, на каждом из этих уровней выполняется заранее определенный набор системных служб.

Уровни запуска:
0 - Выключение системы
1 - Однопользовательский режим работы
2-5 - Многопользовательские режимы работы системы
6 - Перезагрузка системы

Если в приведённом выше списке UNIX/Linux демонов/служб нет работающей на вашей системе, то для получения справки о такой службе используйте man name_daemon , а если и там нет информации о работающей службе, то пишите в комментарии и мы сообща накопаем информации по такой службе и пополним приведённый здесь список UNIX/Linux демонов/служб.

Автозагрузка демонов/служб UNIX/LINUX

Ниже даны подробные инструкции по управлению автозагрузкой демонов/служб в наиболее распространённых модификациях/версиях UNIX-подобных ОС таких как CentOS Linux, Debian Linux и ОС BSD типа. В остальных же модификациях/версиях UNIX-подобных ОС управление автозагрузкой демонов/служб имеет схожий порядок, хотя может иметь некие не существенные или же вовсе радикальные отличия!

Автозагрузка демонов/служб в CentOS Linux

В CentOS уровни загрузки определены по принципу System V и расписаны в файле /etc/inittab, читаем less /etc/inittab .

Каталоги для каждого из уровней загрузки носят названия rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d и расположены в директории /etc/rc.d .

В каждом из каталогов, который соответствует тому или иному уровню загрузки расположены шел скрипты, вернее ссылки на них, с инструкциями для запуска демона/программы/службы, а сами же шел скрипты с инструкциями для запуска демона/программы/службы расположены в каталоге /etc/rc.d/init.d

Пример скриптов управляющих запуском демона/программы/службы можно просмотреть выполнив less /etc/rc.d/init.d/mysqld или less /etc/rc.d/init.d/sshd . Обычно скрипты управляющие запуском демона/программы/службы появляются в /etc/rc.d/init.d/ и линкуются в каталоги уровней запуска после установки ПО, а их статус off/on для каждого из уровней запуска управляется утилитой chkconfig.

Какой из демонов будет запущен на различных уровнях запуска можно посмотреть командой chkconfig --list . Включить демон для автоматического запуска в какой-либо из уровней запуска можно командой chkconfig --level 345 mysqld on , а выключить chkconfig --level 345 mysqld off соответственно, chkconfig –del service_ name удалить службу, chkconfig service_name on|off включить или выключить службу на всех уровнях.

Что касается добавления скриптов в автозагрузку, то для автоматической загрузки скриптов служит /etc/rc.local, в /etc/rc.local достаточно добавить полный путь к скрипту, например: /root/scripts/script.sh или /bin/sh /root/scripts/script.sh . Если после установки ПО в /etc/rc.d/init.d/ нет скрипта управляющего автозапуском нужной программы, то строку её инициализации/запуска проще добавить в /etc/rc.local.

Для управления уровнями запуска существует утилита ntsysv, man ntsysv .

Автозагрузка демонов/служб в Debian Linux

Автозагрузка в Debian Linux построена немного иначе. Уровни загрузки по принципу System V определены и расписаны всё в том же файле /etc/inittab, читаем less /etc/inittab .

Каталоги для каждого из уровней загрузки в Debian Linux тоже носят названия rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d но, расположены уже не в директории /etc/rc.d, а в корне каталога /etc

Шел скрипты с инструкциями для запуска демона/программы/службы, вернее символические ссылки на них расположены в каталогах /etc/rc?.d где знак ? соответствует уровню загрузки, а сами же шел скрипты с инструкциями для запуска демона/программы/службы расположены в каталоге /etc/init.d. Пример такого скипта, по образцу которого можно написать свой, можно найти в файле less /etc/init.d/skeleton .

Ниже дадим пояснения служебной информации используемой в заготовке скрипта /etc/init.d/skeleton :

Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!

Для отслеживания зависимостей важны ключевые слова provides, required- и should-. Остальные не используются. Уровни запуска используются программой по умолчанию для упорядочивания скриптов (например, insserv) для того, чтобы отслеживать, какой из каталогов rc?.d обновлять, когда служба добавляется в первый раз, и должны отражать назначение сервиса. Вот некоторые "виртуальные" объекты:

  • $local_fs - Все локальные фаловые системы подключены. Все скрипты, которые производят запись в /var/ должны зависеть от этого, если они уже не зависят от $remote_fs
  • $network - низкоуровневая сеть, т.е. сетевые карты, может подразумеваться PCMCIA запущеной
  • $named - Демоны, которые могут предоставлять разрешение доменных имён предполагаются запущенными. Например, DNS, NIS+ или LDAP
  • $portmap - Демоны, предоставляющие сервис SunRPC/ONCRPC portmapping как указано в 1833 (если они есть)
  • $remote_fs - Все файловые системы подключены. Скрипты, которые должны быть запущены во время остановки системы до того, как всем процессам будет отправлен сигнал уничтожения, должны зависеть от $remote_fs.
  • $syslog - системный журнал функционирует
  • $time - установленно корректное системное время, например, ntp или rdate, или RTC
  • $all - Запускает скрипт как можно последним

Управление автозагрузкой демонов в Debian Linux осуществляется при помощи утилиты update-rc.d, подробно в man update-rc.d . Утилита update-rc.d не создаёт и не удаляет ничего, кроме символических ссылок в /etc/rc?.d на так званые init скрипты управляющие запуском и остановкой демона/программы/службы, которые расположены в каталоге /etc/init.d.

Если скрипт для автозапуска демона/сервиса создан вручную по шаблону /etc/init.d/skeleton, то его нужно сначала разместить в каталоге /etc/init.d, потом создать символьную ссылку на этот скрипт в каталоге /etc/rc?.d, где ? - номер runlevel’а (уровень загрузки системы). Символическая ссылка должна иметь такой вид S№№имя_скрипта, где №№ - это номер очередности запуска, если требуется оставить символическую ссылку но, скрипт временно не запускать, то символическую ссылку следует модифицировать до такого состояния K№№имя_скрипта.

Перед началом обработки любого из уровней исполнения сначала выполняются все скрипты, которые начинаются с буквы 'K' (эти скрипты останавливают сервисы), а потом выполняются все скрипты, которые начинаются с буквы 'S' (эти скрипты запускают сервисы). Двузначное число после буквы 'S' или 'K' указывает на порядок, в котором будут выполняются скрипты. Скрипты с меньшим номером выполняются первыми, например: S01имя_скрипта стартует первым, а S09имя_скрипта будет запущен девятым.

Для создания символьной ссылки используется программа ln -s file1 file2 , где ключ -s говорит о создании именно символьной ссылки, file1 указывает на существующий файл, а file2 имя новой ссылки но, вместо создания символических линков вручную, можно использовать утилиту update-rc.d, которая создана именно для создания символических ссылок в /etc/rc?.d на скрипты из /etc/init.d.

Синтаксис update-rc.d такой: добавление с параметрами по умолчанию update-rc.d <basename> defaults , удаление и остановка демона/сервиса update-rc.d -f <basename> remove && update-rc.d <basename> stop 20 2 3 4 5 . Стартом и остановкой демонов/сервисов можно управлять через скрипт service name start|stop|restart .

Признаться update-rc.d является относительно мутной утилитой, более удобной является утилита chkconfig, которая в Debian Linux отсутствует по умолчанию. Для её установки нам нужно добавить дополнительные репозитории, желательно использовать только официальные репозитории пакетов Debian Linux, в конец списка vi /etc/apt/sources.list , пример sources.list в Debian GNU/Linux 6.0.5 _Squeeze_ - Official i386:

После чего обновить список пакетов apt-get update и выполнить установку chkconfig apt-get install chkconfig , а также как альтернативу дополнительно можно поставить sysv-rc-conf apt-get install sysv-rc-conf . Как пользоваться утилитой chkconfig было упомянуто выше, дополнительно смотрим man sysv-rc-conf и man chkconfig .

  • main : - пакеты из этой области являются частью полного дистрибутива Debian Linux и ни один из пакетов из области main для полноценного функционирования не требуют программного обеспечения из-за пределов этой области. Любой может свободно использовать, обмениваться, изменять и распространять пакеты из области main.
  • contrib : - пакеты из этой области могут свободно распространяться, однако некоторые их зависимости могут быть не свободны.
  • non-free : - содержит пакеты, которые не могут распространяться бесплатно согласно DSFG, а также пакеты из области могут содержать такие ошибки которые не учитываются при разработке и обновлении Debian Linux.

Для автозапуска прочих скриптов и программ в Debian Linux можно использовать старый-добрый /etc/rc.local.

Автозагрузка демонов/служб в ОС BSD типа

Автор: Олег Головский

Рекомендуемый контент

Вы не любите рекламу!? Напрасно!:) На нашем сайте она вовсе ненавязчивая, а потому для нашего сайта можете полностью отключить AdBlock (uBlock/uBlock Origin/NoScript) и прочие блокировщики рекламы! AdBlock/uBlock может препятствовать нормальной работе системы поиска по сайту, отображению рекомендуемого контента и прочих сервисов Google. Рекомендуем полностью отключить блокировщик рекламы и скриптов, а также разрешить фреймы (aka iframe).

Что такое демоны?

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

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

В Linux существует три типа процессов:

Процессы переднего плана (или «интерактивные процессы») — это те процессы, которые запускаются пользователем в терминале.

Фоновые процессы (или «автоматические процессы») — это объединенные в список процессы, не подключенные к терминалу; они не ожидают пользовательского ввода данных.

Демоны (англ. «daemons») — это особый тип фоновых процессов, которые запускаются при старте системы и продолжают работать в виде системных служб; они не умирают.

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

Примеры демонов в Linux

Наиболее распространенный способ идентификации демона в Linux — это поиск процесса, имя которого заканчивается буквой d. Есть много способов увидеть работающих демонов. Их можно отследить в списках процессов через такие команды, как: ps , top , htop , а также pstree .

Команда pstree показывает процессы, запущенные в настоящее время в нашей системе, и отображает их в виде древовидной диаграммы. Откройте терминал и введите следующую команду:


Вывод команды pstree — это довольно хорошая иллюстрация того, что происходит с нашей системой. Перед нами появился список всех запущенных процессов, среди которых можно заметить и несколько демонов: cupsd, dbus-daemon, kdekonnectd, packagekitd и некоторые другие.

systemd — это системный демон, который (подобно процессу init) является родителем (прямым или косвенным) всех других процессов, и имеет PID=1.

udisksd — обрабатывает такие операции, как: запрос, монтирование, размонтирование, форматирование или отсоединение устройств хранения данных (жесткие диски, USB-флеш-накопители и пр.).

logind — крошечный демон, который различными способами управляет входами пользователей в систему.

sshd — демон, отвечающий за управление службой SSH. Используется практически на любом сервере, который принимает SSH-соединения.

crond — демон планировщика заданий, зависящих от времени. С его помощью можно выполнять обновление программного обеспечения, проверку системы и пр.

Версии происхождения термина «daemon»

Примечание: Демон Максвелла — это результат мысленного эксперимента. В 1867 году Джеймс Клерк Максвелл представил себе разумное и изобретательное существо, способное наблюдать и направлять движение отдельных молекул в заданном направлении. Цель мысленного эксперимента состояла в том, чтобы показать возможность противоречия второму закону термодинамики.


Примечание: «Бисти» по звучанию напоминает BSD (произносится как «Би-Эс-Ди»). При этом beastie является уменьшительной формой от слова beast (зверь).

Читайте также: