Управление процессами и службами (systemd)
Содержание
- 1 Управление процессами и службами (systemd)
- 1.1 1. Подготовка системы
- 1.2 2. Основы systemd
- 1.3 3. Управление службами
- 1.4 4. Создание пользовательских служб
- 1.5 5. Управление процессами
- 1.6 6. Настройка таймеров systemd
- 1.7 7. Управление логированием
- 1.8 8. Управление ресурсами
- 1.9 9. Устранение неполадок
- 1.10 10. Дополнительные возможности
- 1.11 11. Мониторинг и автоматизация =
- 1.12 12. Оптимизация производительности =
- 1.13 Заключение
Управление процессами и службами (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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных проектов с множественными службами
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой systemd и оптимизацией производительности вашего сервера!