вторник, 5 августа 2025 г.

Rocky Linux 9. Сервис Supervisor

Supervisor - это инструмент управления процессами в Linux.

Установка и запуск сервиса:
# yum install supervisor
# systemctl start supervisord
# systemctl enable supervisord


Файлы конфигурации процессов, за которыми будет следить supervisor хранятся тут: /etc/supervisord.d/
Для создания нового сервиса под управлением supervisor нужно создать новый файл в данном каталоге.
Для примера создадим сервис отслеживания и отправки писем.
# nano /etc/supervisord.d/mailer_worker.ini

Содержимое файла сервиса:
[program:mailer_worker]
; Команда запуска скрипта:
command=/usr/bin/php /var/mailer/mailer_worker.php
directory=/var/mailer
; process_name=%(program_name)s_%(process_num)02d
; process_name - Имя процесса (если запущено несколько воркеров)
; numprocs=2 ; Количество процессов (воркеров)
autostart=true
autorestart=true
; Количество попыток перезапуска:
startretries=10
user=korolev
; Логи. Ошибки перенаправляются в stdout
; Директория логов должна существовать
redirect_stderr=true
stdout_logfile=/var/log/supervisor/mailer_worker.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=3
; Время на корректное завершение перед SIGKILL
stopwaitsecs=60


Главная строчка конфигурации – это команда:
command=/usr/bin/php /var/mailer/mailer_worker.php
При запуске просто так в командной строке, этот скрипт должен уходить в бесконечный цикл и не завершаться. Это главное условие работы сервиса mailer_worker под управлением supervisor.
Директива user определяет пользователя, под чьим именем будет работать сервис в системе.

Создаем директорию для логов сервиса supervisor:
# mkdir -p /var/log/supervisor
# chown -R korolev:korolev /var/log/supervisor


Запуск сервиса после добавления или изменения конфигурационных файлов:
# supervisorctl reread
# supervisorctl update
# supervisorctl start mailer_worker:*


Служебные команды проверки работы supervisor:
# supervisorctl status // Статус запущенных процессов
# supervisorctl avail // Проверка программ, под управлением supervisor
# systemctl restart supervisord // Перезапуск
# supervisorctl stop mailer_worker:* // Остановка сервисов, с именем mailer_worker
# supervisorctl start mailer_worker:* // Запуск сервисов, с именем mailer_worker

Установка RabbitMQ в Rocky Linux 9.6

1. Устанавливаем ключи для использования программного обеспечения из репозитариев Erlang и RabbitMQ
# rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'
# rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'
# rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'


2. Создаем репозитарий rabbitmq
# nano /etc/yum.repos.d/rabbitmq.repo
Содержимое файла:
##
## Zero dependency Erlang RPM
##
[modern-erlang]
name=modern-erlang-el9
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/$basearch
        https://yum2.rabbitmq.com/erlang/el/9/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[modern-erlang-noarch]
name=modern-erlang-el9-noarch
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/noarch
        https://yum2.rabbitmq.com/erlang/el/9/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[modern-erlang-source]
name=modern-erlang-el9-source
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/SRPMS
        https://yum2.rabbitmq.com/erlang/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
##
## RabbitMQ Server
##
[rabbitmq-el9]
name=rabbitmq-el9
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/$basearch
        https://yum1.rabbitmq.com/rabbitmq/el/9/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[rabbitmq-el9-noarch]
name=rabbitmq-el9-noarch
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
        https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
       https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[rabbitmq-el9-source]
name=rabbitmq-el9-source
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/SRPMS
        https://yum1.rabbitmq.com/rabbitmq/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
gpgcheck=0
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md


3. Проводим обновление системы:
# dnf update -y

4. Устанавливаем (если его еще нет) пакет logrotate, который необходим для работы RabbitMQ
# dnf install -y logrotate

5. Теперь устанавливаем RabbitMQ
# dnf install -y erlang rabbitmq-server

6. Стартуем сервис RabbitMQ:
# systemctl start rabbitmq-server
# systemctl enable rabbitmq-server
# systemctl status rabbitmq-server


7. Включаем web-интерфейс RabbitMQ:
# rabbitmq-plugins enable rabbitmq_management

8. Проводим открытие портов в файрволл для возможности обращаться к RabbitMQ по сети и просматривать статистику через web-интерфейс:
# firewall-cmd --permanent --add-port={4369/tcp,5672/tcp,25672/tcp,15672/tcp}
# firewall-cmd --reload


9. Пользователи. При установке и запуске сервера RabbitMQ автоматически создается пользователь guest с паролем guest который может подключаться к виртуальному хосту "/" брокера RabbitMQ только локально. Для работы в продакшен создаём пользователя myuser с паролем pass123, делаем этого пользователя администратором:
# rabbitmqctl add_user myuser pass123
# rabbitmqctl set_user_tags smarts administrator
# rabbitmqctl set_permissions -p / smarts ".*" ".*" ".*"
# rabbitmqctl delete_user guest


10. Проверяем доступ к web-интерфейсу RabbitMQ:
http://IPадрес:15672
При авторизации необходимо задать имя пользователя и пароль, определенные ранее.
После авторизации панель управления RabbitMQ будет выглядеть так:


11. Основные команды rabbitmq:
# rabbitmqctl status // Проверить статус
# rabbitmqctl list_users // Список пользователей
# systemctl stop rabbitmq-server // Остановка сервиса
# systemctl start rabbitmq-server // Запуск зерсиса
# rabbitmqadmin delete queue name=emails // Удаление очереди emails
# rabbitmq-diagnostics environment // Вывод переменныхконфигурации


12. Для корректной работы RabbitMQ необходимо увеличить максимальное количество открытых файлов для пользователя rabbitmq до 65536
Для этого выполняем следующее:
12.1 Увеличиваем лимит для пользователя операционной системы:
# nano /etc/security/limits.conf
Добавить перед строкой "# End of file" строки:
rabbitmq    soft    nofile    65536
rabbitmq    hard    nofile    65536

12.2 Отредактировать сервис systemd:
# systemctl edit rabbitmq-server
Добавить сверху блок:
[Service]
LimitNOFILE=65536

Затем перезапустить сервис:
# systemctl daemon-reexec
# systemctl daemon-reload
# systemctl restart rabbitmq-server

12.3 Проверка лимитов:
# sudo -u rabbitmq bash -c 'ulimit -n'
65536
# cat /proc/$(pgrep beam.smp)/limits | grep 'Max open files'      
Max open files        65536      65536     files