Управление процессами и службами (systemd)

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск

Содержание

Управление процессами и службами (systemd)

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Основы systemd

Что такое systemd

systemd - это система инициализации и менеджер служб в современных Linux дистрибутивах. Он заменяет старые системы инициализации (SysV init, Upstart) и предоставляет:

  • Управление службами
  • Управление процессами
  • Управление логированием
  • Управление сетью
  • Управление временем

Основные команды systemd

1. Просмотр статуса служб:

systemctl status

2. Просмотр всех служб:

systemctl list-units

3. Просмотр активных служб:

systemctl list-units --state=active

4. Просмотр неактивных служб:

systemctl list-units --state=inactive

3. Управление службами

Основные команды управления

  • Запуск службы:
sudo systemctl start service_name
  • Остановка службы:
sudo systemctl stop service_name
  • Перезапуск службы:
sudo systemctl restart service_name
  • Перезагрузка конфигурации:
sudo systemctl reload service_name
  • Проверка статуса:
systemctl status service_name

Управление автозапуском

  • Включить автозапуск:
sudo systemctl enable service_name
  • Отключить автозапуск:
sudo systemctl disable service_name
  • Проверить автозапуск:
systemctl is-enabled service_name
  • Проверить активность:
systemctl is-active service_name

4. Создание пользовательских служб

Создание простой службы

1. Создайте файл службы:

sudo nano /etc/systemd/system/my-service.service

2. Добавьте содержимое:

[Unit]
Description=My Custom Service
After=network.target
[Service]
Type=simple
User=myuser
Group=myuser
WorkingDirectory=/home/myuser
ExecStart=/usr/local/bin/my-script.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

3. Перезагрузите systemd:

sudo systemctl daemon-reload

4. Включите и запустите службу:

sudo systemctl enable my-service
sudo systemctl start my-service

Создание службы с зависимостями

1. Создайте службу с зависимостями:

sudo nano /etc/systemd/system/web-app.service

2. Добавьте содержимое:

[Unit]
Description=Web Application
After=network.target mysql.service
Requires=mysql.service
Wants=redis.service
[Service]
Type=forking
User=www-data
Group=www-data
WorkingDirectory=/var/www/web-app
ExecStart=/usr/local/bin/web-app start
ExecStop=/usr/local/bin/web-app stop
ExecReload=/usr/local/bin/web-app reload
PIDFile=/var/run/web-app.pid
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target

5. Управление процессами

Просмотр процессов

1. Просмотрите все процессы:

ps aux

2. Просмотрите процессы в древовидном виде:

ps auxf

3. Просмотрите процессы конкретного пользователя:

ps -u username

4. Просмотрите процессы по PID:

ps -p 1234

Управление процессами

1. Завершить процесс по PID:

kill 1234

2. Принудительно завершить процесс:

kill -9 1234

3. Завершить процесс по имени:

pkill process_name

4. Принудительно завершить по имени:

pkill -9 process_name

Мониторинг процессов

1. Запустите htop для мониторинга:

htop

2. Запустите top для мониторинга:

top

3. Просмотрите использование ресурсов:

ps aux --sort=-%cpu | head -10
ps aux --sort=-%mem | head -10

6. Настройка таймеров systemd

Создание таймера

1. Создайте файл службы:

sudo nano /etc/systemd/system/backup.service

2. Добавьте содержимое:

[Unit]
Description=Backup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
Group=backup

3. Создайте файл таймера:

sudo nano /etc/systemd/system/backup.timer

4. Добавьте содержимое:

[Unit]
Description=Run backup daily
Requires=backup.service
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

5. Включите и запустите таймер:

sudo systemctl enable backup.timer
sudo systemctl start backup.timer

Управление таймерами

  • Просмотр таймеров:
systemctl list-timers
  • Запуск таймера:
sudo systemctl start timer_name.timer
  • Остановка таймера:
sudo systemctl stop timer_name.timer
  • Проверка статуса таймера:
systemctl status timer_name.timer

7. Управление логированием

Просмотр логов

1. Просмотрите логи службы:

sudo journalctl -u service_name

2. Просмотрите логи за последний час:

sudo journalctl -u service_name --since "1 hour ago"

3. Просмотрите логи в реальном времени:

sudo journalctl -u service_name -f

4. Просмотрите логи по приоритету:

sudo journalctl -p err
sudo journalctl -p warning

Настройка логирования

1. Просмотрите настройки journald:

sudo nano /etc/systemd/journald.conf

2. Настройте параметры:

[Journal]
Storage=persistent
SystemMaxUse=1G
SystemMaxFileSize=100M
SystemMaxFiles=10
RuntimeMaxUse=100M
RuntimeMaxFileSize=10M
RuntimeMaxFiles=5

3. Перезапустите journald:

sudo systemctl restart systemd-journald

8. Управление ресурсами

Настройка лимитов ресурсов

1. Создайте службу с лимитами:

sudo nano /etc/systemd/system/limited-service.service

2. Добавьте содержимое:

[Unit]
Description=Limited Service
[Service]
Type=simple
ExecStart=/usr/local/bin/my-app
User=appuser
Group=appuser
LimitNOFILE=1024
LimitNPROC=100
MemoryLimit=512M
CPUQuota=50%

Мониторинг ресурсов

1. Просмотрите использование ресурсов службой:

systemctl show service_name --property=MemoryCurrent,CPUUsageNSec

2. Просмотрите лимиты службы:

systemctl show service_name --property=LimitNOFILE,LimitNPROC,MemoryLimit

9. Устранение неполадок

Частые проблемы

1. Служба не запускается:

  • Проверьте конфигурацию:
    systemctl status service_name
  • Проверьте логи:
    journalctl -u service_name
  • Проверьте права на файлы:
    ls -la /etc/systemd/system/

2. Служба не перезапускается:

  • Проверьте настройки Restart
  • Проверьте зависимости службы
  • Проверьте ресурсы системы

3. Высокое использование ресурсов:

  • Проверьте лимиты:
    systemctl show service_name
  • Настройте лимиты ресурсов
  • Оптимизируйте приложение

Диагностика

1. Проверьте статус службы:

systemctl status service_name

2. Проверьте конфигурацию:

systemctl cat service_name

3. Проверьте зависимости:

systemctl list-dependencies service_name

4. Проверьте логи:

journalctl -u service_name --since "1 hour ago"

10. Дополнительные возможности

Создание шаблонов служб

1. Создайте шаблон службы:

sudo nano /etc/systemd/system/app@.service

2. Добавьте содержимое:

[Unit]
Description=Application %i
After=network.target
[Service]
Type=simple
User=appuser
Group=appuser
WorkingDirectory=/var/app/%i
ExecStart=/usr/local/bin/app --instance=%i
Restart=always
[Install]
WantedBy=multi-user.target

3. Используйте шаблон:

sudo systemctl start app@instance1
sudo systemctl start app@instance2

Настройка сокетов

1. Создайте сокет службы:

sudo nano /etc/systemd/system/my-socket.socket

2. Добавьте содержимое:

[Socket]
ListenStream=8080
Accept=yes
[Install]
WantedBy=sockets.target

3. Создайте службу для сокета:

sudo nano /etc/systemd/system/my-socket@.service

4. Добавьте содержимое:

[Unit]
Description=Socket Service %i
[Service]
Type=simple
ExecStart=/usr/local/bin/socket-handler
User=socketuser
Group=socketuser

11. Мониторинг и автоматизация

Создание скрипта мониторинга

1. Создайте скрипт мониторинга:

sudo nano /usr/local/bin/service-monitor.sh

2. Добавьте содержимое:

CRITICAL_SERVICES=("nginx" "mysql" "apache2" "ssh")
for service in "${CRITICAL_SERVICES[@]}"; do
if ! systemctl is-active --quiet $service; then
echo "ALERT: Service $service is not running" | mail -s "Service Alert" admin@example.com
systemctl start $service
fi
done
MEMORY_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')
if (( $(echo "$MEMORY_USAGE > 80" | bc -l) )); then
echo "ALERT: High memory usage: $MEMORY_USAGE%" | mail -s "Resource Alert" admin@example.com
fi

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/service-monitor.sh

Настройка автоматического мониторинга

1. Создайте службу мониторинга:

sudo nano /etc/systemd/system/service-monitor.service

2. Добавьте содержимое:

[Unit]
Description=Service Monitor
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/service-monitor.sh
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target

3. Создайте таймер для мониторинга:

sudo nano /etc/systemd/system/service-monitor.timer

4. Добавьте содержимое:

[Unit]
Description=Run service monitor every 5 minutes
Requires=service-monitor.service
[Timer]
OnCalendar=*:0/5
Persistent=true
[Install]
WantedBy=timers.target

5. Включите и запустите:

sudo systemctl enable service-monitor.timer
sudo systemctl start service-monitor.timer

12. Оптимизация производительности

Настройки производительности

1. Отредактируйте настройки systemd:

sudo nano /etc/systemd/system.conf

2. Добавьте настройки:

[Manager]
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32768
DefaultTasksMax=32768

3. Перезапустите systemd:

sudo systemctl daemon-reload

Мониторинг производительности

1. Создайте скрипт мониторинга производительности:

sudo nano /usr/local/bin/systemd-stats.sh

2. Добавьте содержимое:

echo "=== SystemD Performance Statistics ==="
echo "Active Services: $(systemctl list-units --state=active | wc -l)"
echo "Failed Services: $(systemctl list-units --state=failed | wc -l)"
echo "System Uptime: $(systemctl show --property=ActiveEnterTimestamp --value)"
echo "Memory Usage: $(ps aux | grep systemd | grep -v grep | awk '{print $4"%"}')"
echo "CPU Usage: $(ps aux | grep systemd | grep -v grep | awk '{print $3"%"}')"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/systemd-stats.sh

Заключение

Управление процессами и службами через systemd настроено! Теперь вы можете эффективно управлять системными службами.

Для размещения ваших проектов с настроенным управлением службами на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой systemd и оптимизацией производительности вашего сервера!