Linux mysql no demon

Что такое демоны в 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 (разветвление). Программа запускается как обычный интерактивный процесс с привязкой к терминалу, но в определённый момент она делится на два идентичных потока. Первый процесс, привязанный к терминалу может выполнятся дальше или завершится, а второй, уже ни к чему не привязанный продолжает работать в фоновом режиме.

Читайте также:  Portmap linux ��� ���

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

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

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

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

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

Как появился термин демон в 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.

Читайте также:  Как быстро очистить весь компьютер windows

Источник

Как создать демон с подключением к БД MySQL

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

  1. получить все необходимые задания из очереди
  2. выполните задания
  3. спать в течение N секунд
  4. Гото 1

демон должен выжить прерванная служба с сервера БД MySQL и нарушение соединений с БД.

вы бы разработали демон для подключения к серверу БД один раз за цикл? т. е. подключение до 1. и разрыв между 2 и 3?

или вы хотите, чтобы демон поддерживал соединение открытым? В этом случае ему также необходимо a) определить, когда сервер или соединение не работает, b) отключить и повторно подключиться, и c) сделать это без накопления соединений DB, дескрипторов соединений dud или других мертвых ресурсы.

Если у вас есть предпочтения, почему?

факторы, которые входят в конструкцию?

какие-то другие подходы?

ответ здесь: mysql соединение от демона, написанного на php не говорит, Почему лучше держать соединение открытым. Я читал в другом месте, что накладные расходы на соединение в MySQL очень легкие. Поэтому не очевидно, почему постоянное использование одного подключения к серверу лучше, чем подключение/отключение каждые несколько секунд.

в моем случае демон написан на PHP.

3 ответов

Я на самом деле работаю над что-то очень близко к тому, что вы описали, но в моем случае демон не опрашивает событие, которое он получает асинхронно через XMPP (но это помимо точки).

вырезать среднего человека

Я думаю, что вместо хранения событий в базе данных и опроса их с MySQL вы, вероятно, могли бы использовать Gearman отправлять их с клиента асинхронно (пример).

Вывоз Мусора

PHP на самом деле не предназначен для работы в качестве демона, и это было не до PHP 5.3, когда он получил круговой сбор мусора что это стало приемлемым вариантом. Это очень важно, чтобы вы использовали PHP 5.3, если вы хотите иметь возможность работать в долгосрочной перспективе без утечек памяти.

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

Стат Кэш

другое дело, что важно работать clearstatcache время от времени. Поскольку ваш процесс PHP не перезапущен, важно сделать этот вызов вручную, чтобы предотвратить получение старых данных stat (которые могут или может не повлиять на вас). Согласно документация эти функции кэшируются.

затронутые функции включают stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype () и fileperms ().

управление ресурсами

Если вы собираетесь использовать вещь как MySQL во время жизни вашего процесса, я бы предложил сделать одно соединение при запуске и сохранить его в живых. Даже если он может использовать больше ОЗУ на стороне MySQL, вы вырежете некоторую задержку и накладные расходы процессора, не подключаясь каждые 1 секунду.

нет запроса URL

Это может показаться очевидным, но с cli PHP нет информации о запросе URL. Некоторые библиотеки не написаны с учетом этого, и это может вызвать некоторые проблемы.

LooPHP

Я собираюсь вытащить бесстыдный плагин здесь для фреймворка, который я написал, чтобы помочь с управлением демонами PHP. LooPHP — это структура цикла выполнения, которая позволяет запланировать событие или создать прослушивает абстрактные источники (сокет, поток и т. д.). В моем случае у меня есть демон, делающий более 1 вещи, поэтому очень полезно, чтобы система отслеживала все таймеры для меня, чтобы я мог эффективно опрашивать stream_select для на подключения по протоколу XMPP.

Читайте также:  Адаптер elm327 usb драйвер windows 10

Если вы хотите сделать надежный демон, вам нужно будет поймать ошибки/разъединения базы данных и снова подключиться в любом случае (отключение или оставаться на связи). Поскольку вам все равно нужно это сделать, вы можете повторно использовать одно соединение.

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

Итак, я считаю, что самым чистым способом было бы сохранить соединение. Но едва-едва.

Я думаю, что лучшее, что вы могли бы сделать, это измерить время, необходимое для подключения/отключения К/из базы данных. Затем попробуйте придумать какую-то вероятность того, что сервер базы данных станет недоступным. Определить стоимость постоянного подключения к серверу. И, наконец, попробуйте определить стоимость (в часах, раздражение или что-то еще) добавления кода, который имеет дело с проблемами подключения к базе данных. Если вы можете успешно определить эти числа и сравнить их, у вас есть ответ. Он мне трудно (и я предполагаю, что кто-то) придумать хорошие догадки для этих значений, но вывод, вероятно, будет заключаться в том, что это выбор между производительностью и осуществимостью (с точки зрения более низкой стоимости).

Источник

mysql on amazon linux — MySQL Daemon failed to start

I tried that restarting EC2 instance and sudo service httpd restart .

But I still get this message:

Also I get this message:

I don’t know what should I do..

(+ I’m also using amazon RDS.)

Now, I tried sudo chown -R mysql:mysql /var/lib/mysql too.

5 Answers 5

As per today the nano instances with 0.5GiB memory do not allow running mysqld — they do not have enough memory. Running a micro instance with 1GiB memory fixes the problem completely. I think guys at AWS should have made a note about this in the LAMP installation instructions, as this research costed me several hours or even a day before I figured it out.

I answer myself to my question to help other people in the same problem.

I resolved this problem from these steps:

  1. Restart your EC2 instance.
  2. Type sudo service httpd restart . (I don’t know why I should do these two steps.)
  3. Type sudo chown -R mysql:mysql /var/lib/mysql . — Before typing this command, check your user= option in your /etc/my.cnf . If there is no user= option, your user is «mysql». (Visit https://stackoverflow.com/a/21435052/1570534)
  4. Change the innodb_buffer_pool_size option inside /etc/my.cnf from 128 (can be different) to 500M . If you don’t have innodb_buffer_pool_size option in your /etc/my.cnf , add innodb_buffer_pool_size=500M in [mysqld] section.

I hope it helps you!

If the issue is in Amazon Linux OS, please check whether you have free swap. I faced the same issue, when I add more swap, mysql service start working. You can see more from here http://www.linuxblackmagic.com/2018/04/mysql-daemon-failed-to-start-in-amazon.html

This will surely work for you. Shivin Vijai

I also faced the same issue when setting up an instance on Lightsail with the lowest cost instance (512MB, 1 vCPU, 20 GB SSD).

I was able to solve the issue by adding a swap file in the instance.

Here is the step to create a swap:

  1. Use the dd command to create a swap file on the root file system, where «bs» is the block size and «count» is the number of blocks. In this example the swap file is 1 GB:
  1. Update the read and write permissions for the swap file:
  1. Set up a Linux swap area:
  1. Make the swap file available for immediate use by adding the swap file to swap space:
  1. Verify that the procedure was successful:
  1. Enable the swap file at boot time by editing the /etc/fstab file:

Источник

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