Linux daemon как запустить

Run Bash Script as a Daemon

announcement - icon

The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.

To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.

Connect your cluster and start monitoring your K8s costs right away:

1. Overview

In this tutorial, we’ll learn how to run a bash script as a daemon in the background.

2. Daemonizing Script as a Regular User

We can make use of bash processes to run our script in the background. We launch background tasks or processes with the & operator.

For example, let’s daemonize this simple script which we’ve placed at /home/baeldung/script.sh:

# Print a message every 60 seconds. while :; do sleep 60 echo "Slept for 60 seconds!" done

Running the script with the nohup command ensures that it’s not killed when we exit the terminal:

$ nohup ./script.sh & nohup: appending output to nohup.out

nohup logs any output from the script into the nohup.out file:

$ cat nohup.out Slept for 60 seconds! Slept for 60 seconds! . 

We can close the terminal after starting the script.

For killing the process, we can log the launched process’s PID into a file and use it with kill:

$ nohup ./script.sh & nohup: appending output to nohup.out $ echo $! > ./script.pid $ cat script.pid 4946

The $! variable stores the PID of the newly launched process. Therefore, we can just kill the script:

While the method we’ve seen here is straightforward, it does require extra user intervention for the startup and shutdown of the script.

3. Daemonizing Script System-Wide

We just learned how to run scripts in the background as regular users. Now, we’ll cover more sophisticated methods which allow us to control the script via the system’s service manager.

3.1. Using systemd

We can use systemd unit files to launch our script at boot. Unit files describe how the system should execute the given program.

Let’s create a unit file at /etc/systemd/system/script_daemon.service:

[Unit] Description=Script Daemon [Service] Type=simple User=baeldung ExecStart=/home/baeldung/script.sh Restart=on-failure [Install] WantedBy=default.target 

We set the user that the script will run with the User= option and the path to the script with the ExecStart= option. The various options are documented in the systemd.exec man page.

Now, let’s enable the service:

$ sudo systemctl daemon-reload $ sudo systemctl enable script_daemon.service Created symlink /etc/systemd/system/shutdown.target.wants/script_daemon.service → /etc/systemd/system/script_daemon.service

Here, we reload the systemd config and enable our service using the systemctl tool, which helps manage systemd services.

Читайте также:  Linux вернуть загрузчик windows

We can also add dependencies to various other services.

For example, we might want to ensure that the network is available before starting our script. We do this with the After= option:

[Unit] Description=Script Daemon After=network.target [Service] . 

We can restart the service with sudo systemctl restart script_daemon.service. It will be auto-started at boot.

3.2. Using /etc/rc.local

The /etc/rc.local file consists of commands that we want to run. Hence, we can just append the path to our script into this file:

$ echo "/home/baeldung/script.sh" >> /etc/rc.local

The script is executed as the root user by default. For dropping privileges, we can execute the command as a different user with su:

$ echo "su - baeldung /home/baeldung/script.sh" >> /etc/rc.local

We should note that this command should be the last one run from /etc/rc.local since it blocks execution.

To make it non-blocking, we can use the nohup command with the & operator that we learned about earlier.

Further, we should avoid this approach using the /etc/rc.local file if systemd is available as it is a legacy file.

4. Conclusion

In this article, we learned various methods we can use to run scripts as daemons. We used bash processes, systemd services, and the /etc/rc.local file. We also learned about dropping privileges when running scripts through the system’s service manager.

Источник

Что такое демоны в Linux

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

За это можно благодарить демонов, они делают эту работу за нас. В сегодняшней статье мы рассмотрим что такое демоны в Linux, а также зачем они нужны.

Что такое демоны в понятии Linux

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

Многие люди, перешедшие в Linux из Windows знают демонов как службы или сервисы. В MacOS термин «Служба» имеет другое значение. Так как MacOS это тоже Unix, в ней испольуются демоны. А службами называются программы, которые находятся в меню Службы.

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

Какие демоны работают на вашем компьютере

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

Читайте также:  Компас работает в линуксе

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

Вот демоны Linux, которых вы можете здесь увидеть: udisksd, gvfsd, systemd, logind и много других. Список процессов довольно длинный, поэтому он не поместится в одном окне терминала, но вы можете его листать.

Запуск демонов в Linux

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

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

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

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

Существуют и другие способы ветвления программ в Linux, но традиционно для создания дочерних процессов создается копия текущего. Термин forking появился не из ниоткуда. Его название походит от функции языка программирования Си. Стандартная библиотека Си содержит методы для управления службами, и один из них называется fork. Используется он для создания новых процессов. После создания процесса, процесс, на основе которого был создан демон считается для него родительским процессом.

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

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

Самый простой способ определить демона — это буква d в конце его названия. Вот небольшой список демонов, которые работают в вашей системе. Каждый демон создан для выполнения определённой задачи.

  • systemd — основная задача этого демона унифицировать конфигурацию и поведение других демонов в разных дистрибутивах Linux.
  • udisksd — обрабатывает такие операции как: монтирование, размонтирование, форматирование, подключение и отключение устройств хранения данных, таких как жесткие диски, USB флешки и т д.
  • logind — небольшой демон, управляющий авторизацией пользователей.
  • httpd — демон веб-сервера, позволяет размешать на компьютере или сервере веб-сайты.
  • sshd — позволяет подключаться к серверу или компьютеру удалённо, по протоколу SSH.
  • ftpd — организует доступ к компьютеру по протоколу FTP для передачи файлов.
  • crond — демон планировщика, позволяющий выполнять нужные задачи в определённое время.
Читайте также:  Копирование содержимого директории linux

Как появился термин демон в Linux

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

Изначально это слово писалось как daimon и означало ангелов хранителей или духов помощников, которые помогали формировать характеры людей. Сократ утверждал, что у него был демон, который ему помогал. Демон Сократа говорил ему когда следует держать язык за зубами. Он рассказал о своем демоне во время суда в 399 году до нашей эры. Так что вера в демонов существует довольно давно. Иногда слово daimon пишется как daemon. Это одно и то же.

В то время как daemon — помощник, demon — это злой персонаж из библии. Различия в написании не случайны и видимо так было решено где-то в 16-том веке. Тогда решили, что daemons — хорошие парни, а demons — плохие.

Использовать слово демон (daemon) в вычислительной технике начали в 1963 году. Проект Project MAC (Project on Mathematics and Computation) был разработан в Массачусетском технологическом институте. И именно в этом проекте начали использовать слово демон для обозначения любых программ, которые работают в фоновом режиме, следят за состоянием других процессов и выполняют действия в зависимости от ситуации. Эти программы были названы в честь демона Максвелла.

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

Однако есть и другие варианты значения этого слова. Например это может быть аббревиатура от Disk And Executive MONitor. Хотя первоначальные пользователи термина демон не использовали его для этих целей, так что вариант с аббревиатурой, скорее всего неверный.

Теперь вы знаете что такое демоны в понятии Linux. На завершение, обратите внимание, что талисман BSD — демон. Он выбран в честь программных демонов (daemons) но выглядит как злой демон (demon). Имя этого демона Beastie. Точно неизвестно откуда взялось это имя, но есть предположения, оно походит от фразы: BSD. Try it; I did. Если произнести это на английском быстро, получится звук похожий на Beastie. А ещё тризуб Beastie символизирует разветвление (forking) процессов в Linux.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector