Управление процессами и службами (systemd) — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Управление процессами и службами (systemd) = == 1. Подготовка системы == * Войдите в систему по…») |
Admin (обсуждение | вклад) |
||
Строка 21: | Строка 21: | ||
1. '''Просмотр статуса служб''': | 1. '''Просмотр статуса служб''': | ||
− | <code> | + | <code>systemctl status</code> |
− | systemctl status | ||
− | </code> | ||
2. '''Просмотр всех служб''': | 2. '''Просмотр всех служб''': | ||
− | <code> | + | <code>systemctl list-units</code> |
− | systemctl list-units | ||
− | </code> | ||
3. '''Просмотр активных служб''': | 3. '''Просмотр активных служб''': | ||
− | <code> | + | <code>systemctl list-units --state=active</code> |
− | systemctl list-units --state=active | ||
− | </code> | ||
4. '''Просмотр неактивных служб''': | 4. '''Просмотр неактивных служб''': | ||
− | <code> | + | <code>systemctl list-units --state=inactive</code> |
− | systemctl list-units --state=inactive | ||
− | </code> | ||
== 3. Управление службами == | == 3. Управление службами == | ||
Строка 45: | Строка 37: | ||
* '''Запуск службы''': | * '''Запуск службы''': | ||
− | <code> | + | <code>sudo systemctl start service_name</code> |
− | sudo systemctl start service_name | ||
− | </code> | ||
* '''Остановка службы''': | * '''Остановка службы''': | ||
− | <code> | + | <code>sudo systemctl stop service_name</code> |
− | sudo systemctl stop service_name | ||
− | </code> | ||
* '''Перезапуск службы''': | * '''Перезапуск службы''': | ||
− | <code> | + | <code>sudo systemctl restart service_name</code> |
− | sudo systemctl restart service_name | ||
− | </code> | ||
* '''Перезагрузка конфигурации''': | * '''Перезагрузка конфигурации''': | ||
− | <code> | + | <code>sudo systemctl reload service_name</code> |
− | sudo systemctl reload service_name | ||
− | </code> | ||
* '''Проверка статуса''': | * '''Проверка статуса''': | ||
− | <code> | + | <code>systemctl status service_name</code> |
− | systemctl status service_name | ||
− | </code> | ||
=== Управление автозапуском === | === Управление автозапуском === | ||
* '''Включить автозапуск''': | * '''Включить автозапуск''': | ||
− | <code> | + | <code>sudo systemctl enable service_name</code> |
− | sudo systemctl enable service_name | ||
− | </code> | ||
* '''Отключить автозапуск''': | * '''Отключить автозапуск''': | ||
− | <code> | + | <code>sudo systemctl disable service_name</code> |
− | sudo systemctl disable service_name | ||
− | </code> | ||
* '''Проверить автозапуск''': | * '''Проверить автозапуск''': | ||
− | <code> | + | <code>systemctl is-enabled service_name</code> |
− | systemctl is-enabled service_name | ||
− | </code> | ||
* '''Проверить активность''': | * '''Проверить активность''': | ||
− | <code> | + | <code>systemctl is-active service_name</code> |
− | systemctl is-active service_name | ||
− | </code> | ||
== 4. Создание пользовательских служб == | == 4. Создание пользовательских служб == | ||
Строка 96: | Строка 70: | ||
1. Создайте файл службы: | 1. Создайте файл службы: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/my-service.service</code> |
− | sudo nano /etc/systemd/system/my-service.service | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=My Custom Service</code> |
− | Description=My Custom Service | + | <code>After=network.target</code> |
− | After=network.target | + | <code>[Service]</code> |
− | + | <code>Type=simple</code> | |
− | [Service] | + | <code>User=myuser</code> |
− | Type=simple | + | <code>Group=myuser</code> |
− | User=myuser | + | <code>WorkingDirectory=/home/myuser</code> |
− | Group=myuser | + | <code>ExecStart=/usr/local/bin/my-script.sh</code> |
− | WorkingDirectory=/home/myuser | + | <code>Restart=always</code> |
− | ExecStart=/usr/local/bin/my-script.sh | + | <code>RestartSec=5</code> |
− | Restart=always | + | <code>[Install]</code> |
− | RestartSec=5 | + | <code>WantedBy=multi-user.target</code> |
− | |||
− | [Install] | ||
− | WantedBy=multi-user.target | ||
− | </code> | ||
3. Перезагрузите systemd: | 3. Перезагрузите systemd: | ||
− | <code> | + | <code>sudo systemctl daemon-reload</code> |
− | sudo systemctl daemon-reload | ||
− | </code> | ||
4. Включите и запустите службу: | 4. Включите и запустите службу: | ||
− | <code> | + | <code>sudo systemctl enable my-service</code> |
− | sudo systemctl enable my-service | + | <code>sudo systemctl start my-service</code> |
− | sudo systemctl start my-service | ||
− | </code> | ||
=== Создание службы с зависимостями === | === Создание службы с зависимостями === | ||
1. Создайте службу с зависимостями: | 1. Создайте службу с зависимостями: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/web-app.service</code> |
− | sudo nano /etc/systemd/system/web-app.service | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Web Application</code> |
− | Description=Web Application | + | <code>After=network.target mysql.service</code> |
− | After=network.target mysql.service | + | <code>Requires=mysql.service</code> |
− | Requires=mysql.service | + | <code>Wants=redis.service</code> |
− | Wants=redis.service | + | <code>[Service]</code> |
− | + | <code>Type=forking</code> | |
− | [Service] | + | <code>User=www-data</code> |
− | Type=forking | + | <code>Group=www-data</code> |
− | User=www-data | + | <code>WorkingDirectory=/var/www/web-app</code> |
− | Group=www-data | + | <code>ExecStart=/usr/local/bin/web-app start</code> |
− | WorkingDirectory=/var/www/web-app | + | <code>ExecStop=/usr/local/bin/web-app stop</code> |
− | ExecStart=/usr/local/bin/web-app start | + | <code>ExecReload=/usr/local/bin/web-app reload</code> |
− | ExecStop=/usr/local/bin/web-app stop | + | <code>PIDFile=/var/run/web-app.pid</code> |
− | ExecReload=/usr/local/bin/web-app reload | + | <code>Restart=on-failure</code> |
− | PIDFile=/var/run/web-app.pid | + | <code>RestartSec=10</code> |
− | Restart=on-failure | + | <code>[Install]</code> |
− | RestartSec=10 | + | <code>WantedBy=multi-user.target</code> |
− | |||
− | [Install] | ||
− | WantedBy=multi-user.target | ||
− | </code> | ||
== 5. Управление процессами == | == 5. Управление процессами == | ||
Строка 166: | Строка 124: | ||
1. Просмотрите все процессы: | 1. Просмотрите все процессы: | ||
− | <code> | + | <code>ps aux</code> |
− | ps aux | ||
− | </code> | ||
2. Просмотрите процессы в древовидном виде: | 2. Просмотрите процессы в древовидном виде: | ||
− | <code> | + | <code>ps auxf</code> |
− | ps auxf | ||
− | </code> | ||
3. Просмотрите процессы конкретного пользователя: | 3. Просмотрите процессы конкретного пользователя: | ||
− | <code> | + | <code>ps -u username</code> |
− | ps -u username | ||
− | </code> | ||
4. Просмотрите процессы по PID: | 4. Просмотрите процессы по PID: | ||
− | <code> | + | <code>ps -p 1234</code> |
− | ps -p 1234 | ||
− | </code> | ||
=== Управление процессами === | === Управление процессами === | ||
1. '''Завершить процесс по PID''': | 1. '''Завершить процесс по PID''': | ||
− | <code> | + | <code>kill 1234</code> |
− | kill 1234 | ||
− | </code> | ||
2. '''Принудительно завершить процесс''': | 2. '''Принудительно завершить процесс''': | ||
− | <code> | + | <code>kill -9 1234</code> |
− | kill -9 1234 | ||
− | </code> | ||
3. '''Завершить процесс по имени''': | 3. '''Завершить процесс по имени''': | ||
− | <code> | + | <code>pkill process_name</code> |
− | pkill process_name | ||
− | </code> | ||
4. '''Принудительно завершить по имени''': | 4. '''Принудительно завершить по имени''': | ||
− | <code> | + | <code>pkill -9 process_name</code> |
− | pkill -9 process_name | ||
− | </code> | ||
=== Мониторинг процессов === | === Мониторинг процессов === | ||
1. Запустите htop для мониторинга: | 1. Запустите htop для мониторинга: | ||
− | <code> | + | <code>htop</code> |
− | htop | ||
− | </code> | ||
2. Запустите top для мониторинга: | 2. Запустите top для мониторинга: | ||
− | <code> | + | <code>top</code> |
− | top | ||
− | </code> | ||
3. Просмотрите использование ресурсов: | 3. Просмотрите использование ресурсов: | ||
− | <code> | + | <code>ps aux --sort=-%cpu | head -10</code> |
− | ps aux --sort=-%cpu | head -10 | + | <code>ps aux --sort=-%mem | head -10</code> |
− | ps aux --sort=-%mem | head -10 | ||
− | </code> | ||
== 6. Настройка таймеров systemd == | == 6. Настройка таймеров systemd == | ||
Строка 230: | Строка 166: | ||
1. Создайте файл службы: | 1. Создайте файл службы: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/backup.service</code> |
− | sudo nano /etc/systemd/system/backup.service | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Backup Service</code> |
− | Description=Backup Service | + | <code>[Service]</code> |
− | + | <code>Type=oneshot</code> | |
− | [Service] | + | <code>ExecStart=/usr/local/bin/backup.sh</code> |
− | Type=oneshot | + | <code>User=backup</code> |
− | ExecStart=/usr/local/bin/backup.sh | + | <code>Group=backup</code> |
− | User=backup | ||
− | Group=backup | ||
− | </code> | ||
3. Создайте файл таймера: | 3. Создайте файл таймера: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/backup.timer</code> |
− | sudo nano /etc/systemd/system/backup.timer | ||
− | </code> | ||
4. Добавьте содержимое: | 4. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Run backup daily</code> |
− | Description=Run backup daily | + | <code>Requires=backup.service</code> |
− | Requires=backup.service | + | <code>[Timer]</code> |
− | + | <code>OnCalendar=daily</code> | |
− | [Timer] | + | <code>Persistent=true</code> |
− | OnCalendar=daily | + | <code>[Install]</code> |
− | Persistent=true | + | <code>WantedBy=timers.target</code> |
− | |||
− | [Install] | ||
− | WantedBy=timers.target | ||
− | </code> | ||
5. Включите и запустите таймер: | 5. Включите и запустите таймер: | ||
− | <code> | + | <code>sudo systemctl enable backup.timer</code> |
− | sudo systemctl enable backup.timer | + | <code>sudo systemctl start backup.timer</code> |
− | sudo systemctl start backup.timer | ||
− | </code> | ||
=== Управление таймерами === | === Управление таймерами === | ||
* '''Просмотр таймеров''': | * '''Просмотр таймеров''': | ||
− | <code> | + | <code>systemctl list-timers</code> |
− | systemctl list-timers | ||
− | </code> | ||
* '''Запуск таймера''': | * '''Запуск таймера''': | ||
− | <code> | + | <code>sudo systemctl start timer_name.timer</code> |
− | sudo systemctl start timer_name.timer | ||
− | </code> | ||
* '''Остановка таймера''': | * '''Остановка таймера''': | ||
− | <code> | + | <code>sudo systemctl stop timer_name.timer</code> |
− | sudo systemctl stop timer_name.timer | ||
− | </code> | ||
* '''Проверка статуса таймера''': | * '''Проверка статуса таймера''': | ||
− | <code> | + | <code>systemctl status timer_name.timer</code> |
− | systemctl status timer_name.timer | ||
− | </code> | ||
== 7. Управление логированием == | == 7. Управление логированием == | ||
Строка 298: | Строка 213: | ||
1. Просмотрите логи службы: | 1. Просмотрите логи службы: | ||
− | <code> | + | <code>sudo journalctl -u service_name</code> |
− | sudo journalctl -u service_name | ||
− | </code> | ||
2. Просмотрите логи за последний час: | 2. Просмотрите логи за последний час: | ||
− | <code> | + | <code>sudo journalctl -u service_name --since "1 hour ago"</code> |
− | sudo journalctl -u service_name --since "1 hour ago" | ||
− | </code> | ||
3. Просмотрите логи в реальном времени: | 3. Просмотрите логи в реальном времени: | ||
− | <code> | + | <code>sudo journalctl -u service_name -f</code> |
− | sudo journalctl -u service_name -f | ||
− | </code> | ||
4. Просмотрите логи по приоритету: | 4. Просмотрите логи по приоритету: | ||
− | <code> | + | <code>sudo journalctl -p err</code> |
− | sudo journalctl -p err | + | <code>sudo journalctl -p warning</code> |
− | sudo journalctl -p warning | ||
− | </code> | ||
=== Настройка логирования === | === Настройка логирования === | ||
1. Просмотрите настройки journald: | 1. Просмотрите настройки journald: | ||
− | <code> | + | <code>sudo nano /etc/systemd/journald.conf</code> |
− | sudo nano /etc/systemd/journald.conf | ||
− | </code> | ||
2. Настройте параметры: | 2. Настройте параметры: | ||
− | <code> | + | <code>[Journal]</code> |
− | [Journal] | + | <code>Storage=persistent</code> |
− | Storage=persistent | + | <code>SystemMaxUse=1G</code> |
− | SystemMaxUse=1G | + | <code>SystemMaxFileSize=100M</code> |
− | SystemMaxFileSize=100M | + | <code>SystemMaxFiles=10</code> |
− | SystemMaxFiles=10 | + | <code>RuntimeMaxUse=100M</code> |
− | RuntimeMaxUse=100M | + | <code>RuntimeMaxFileSize=10M</code> |
− | RuntimeMaxFileSize=10M | + | <code>RuntimeMaxFiles=5</code> |
− | RuntimeMaxFiles=5 | ||
− | </code> | ||
3. Перезапустите journald: | 3. Перезапустите journald: | ||
− | <code> | + | <code>sudo systemctl restart systemd-journald</code> |
− | sudo systemctl restart systemd-journald | ||
− | </code> | ||
== 8. Управление ресурсами == | == 8. Управление ресурсами == | ||
Строка 347: | Строка 248: | ||
1. Создайте службу с лимитами: | 1. Создайте службу с лимитами: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/limited-service.service</code> |
− | sudo nano /etc/systemd/system/limited-service.service | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Limited Service</code> |
− | Description=Limited Service | + | <code>[Service]</code> |
− | + | <code>Type=simple</code> | |
− | [Service] | + | <code>ExecStart=/usr/local/bin/my-app</code> |
− | Type=simple | + | <code>User=appuser</code> |
− | ExecStart=/usr/local/bin/my-app | + | <code>Group=appuser</code> |
− | User=appuser | + | <code>LimitNOFILE=1024</code> |
− | Group=appuser | + | <code>LimitNPROC=100</code> |
− | LimitNOFILE=1024 | + | <code>MemoryLimit=512M</code> |
− | LimitNPROC=100 | + | <code>CPUQuota=50%</code> |
− | MemoryLimit=512M | ||
− | CPUQuota=50% | ||
− | </code> | ||
=== Мониторинг ресурсов === | === Мониторинг ресурсов === | ||
1. Просмотрите использование ресурсов службой: | 1. Просмотрите использование ресурсов службой: | ||
− | <code> | + | <code>systemctl show service_name --property=MemoryCurrent,CPUUsageNSec</code> |
− | systemctl show service_name --property=MemoryCurrent,CPUUsageNSec | ||
− | </code> | ||
2. Просмотрите лимиты службы: | 2. Просмотрите лимиты службы: | ||
− | <code> | + | <code>systemctl show service_name --property=LimitNOFILE,LimitNPROC,MemoryLimit</code> |
− | systemctl show service_name --property=LimitNOFILE,LimitNPROC,MemoryLimit | ||
− | </code> | ||
== 9. Устранение неполадок == | == 9. Устранение неполадок == | ||
Строка 401: | Строка 293: | ||
1. Проверьте статус службы: | 1. Проверьте статус службы: | ||
− | <code> | + | <code>systemctl status service_name</code> |
− | systemctl status service_name | ||
− | </code> | ||
2. Проверьте конфигурацию: | 2. Проверьте конфигурацию: | ||
− | <code> | + | <code>systemctl cat service_name</code> |
− | systemctl cat service_name | ||
− | </code> | ||
3. Проверьте зависимости: | 3. Проверьте зависимости: | ||
− | <code> | + | <code>systemctl list-dependencies service_name</code> |
− | systemctl list-dependencies service_name | ||
− | </code> | ||
4. Проверьте логи: | 4. Проверьте логи: | ||
− | <code> | + | <code>journalctl -u service_name --since "1 hour ago"</code> |
− | journalctl -u service_name --since "1 hour ago" | ||
− | </code> | ||
== 10. Дополнительные возможности == | == 10. Дополнительные возможности == | ||
Строка 425: | Строка 309: | ||
1. Создайте шаблон службы: | 1. Создайте шаблон службы: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/app@.service</code> |
− | sudo nano /etc/systemd/system/app@.service | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Application %i</code> |
− | Description=Application %i | + | <code>After=network.target</code> |
− | After=network.target | + | <code>[Service]</code> |
− | + | <code>Type=simple</code> | |
− | [Service] | + | <code>User=appuser</code> |
− | Type=simple | + | <code>Group=appuser</code> |
− | User=appuser | + | <code>WorkingDirectory=/var/app/%i</code> |
− | Group=appuser | + | <code>ExecStart=/usr/local/bin/app --instance=%i</code> |
− | WorkingDirectory=/var/app/%i | + | <code>Restart=always</code> |
− | ExecStart=/usr/local/bin/app --instance=%i | + | <code>[Install]</code> |
− | Restart=always | + | <code>WantedBy=multi-user.target</code> |
− | |||
− | [Install] | ||
− | WantedBy=multi-user.target | ||
− | </code> | ||
3. Используйте шаблон: | 3. Используйте шаблон: | ||
− | <code> | + | <code>sudo systemctl start app@instance1</code> |
− | sudo systemctl start app@instance1 | + | <code>sudo systemctl start app@instance2</code> |
− | sudo systemctl start app@instance2 | ||
− | </code> | ||
=== Настройка сокетов === | === Настройка сокетов === | ||
1. Создайте сокет службы: | 1. Создайте сокет службы: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/my-socket.socket</code> |
− | sudo nano /etc/systemd/system/my-socket.socket | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>[Socket]</code> |
− | [Socket] | + | <code>ListenStream=8080</code> |
− | ListenStream=8080 | + | <code>Accept=yes</code> |
− | Accept=yes | + | <code>[Install]</code> |
− | + | <code>WantedBy=sockets.target</code> | |
− | [Install] | ||
− | WantedBy=sockets.target | ||
− | </code> | ||
3. Создайте службу для сокета: | 3. Создайте службу для сокета: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/my-socket@.service</code> |
− | sudo nano /etc/systemd/system/my-socket@.service | ||
− | </code> | ||
4. Добавьте содержимое: | 4. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Socket Service %i</code> |
− | Description=Socket Service %i | + | <code>[Service]</code> |
− | + | <code>Type=simple</code> | |
− | [Service] | + | <code>ExecStart=/usr/local/bin/socket-handler</code> |
− | Type=simple | + | <code>User=socketuser</code> |
− | ExecStart=/usr/local/bin/socket-handler | + | <code>Group=socketuser</code> |
− | User=socketuser | ||
− | Group=socketuser | ||
− | </code> | ||
== 11. Мониторинг и автоматизация === | == 11. Мониторинг и автоматизация === | ||
Строка 492: | Строка 358: | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | <code> | + | <code>sudo nano /usr/local/bin/service-monitor.sh</code> |
− | sudo nano /usr/local/bin/service-monitor.sh | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>CRITICAL_SERVICES=("nginx" "mysql" "apache2" "ssh")</code> |
− | + | <code>for service in "${CRITICAL_SERVICES[@]}"; do</code> | |
− | + | <code>if ! systemctl is-active --quiet $service; then</code> | |
− | + | <code>echo "ALERT: Service $service is not running" | mail -s "Service Alert" admin@example.com</code> | |
− | CRITICAL_SERVICES=("nginx" "mysql" "apache2" "ssh") | + | <code>systemctl start $service</code> |
− | + | <code>fi</code> | |
− | for service in "${CRITICAL_SERVICES[@]}"; do | + | <code>done</code> |
− | + | <code>MEMORY_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')</code> | |
− | + | <code>if (( $(echo "$MEMORY_USAGE > 80" | bc -l) )); then</code> | |
− | + | <code>echo "ALERT: High memory usage: $MEMORY_USAGE%" | mail -s "Resource Alert" admin@example.com</code> | |
− | + | <code>fi</code> | |
− | |||
− | done | ||
− | |||
− | |||
− | MEMORY_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}') | ||
− | if (( $(echo "$MEMORY_USAGE > 80" | bc -l) )); then | ||
− | |||
− | fi | ||
− | </code> | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /usr/local/bin/service-monitor.sh</code> |
− | sudo chmod +x /usr/local/bin/service-monitor.sh | ||
− | </code> | ||
=== Настройка автоматического мониторинга === | === Настройка автоматического мониторинга === | ||
1. Создайте службу мониторинга: | 1. Создайте службу мониторинга: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/service-monitor.service</code> |
− | sudo nano /etc/systemd/system/service-monitor.service | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Service Monitor</code> |
− | Description=Service Monitor | + | <code>After=network.target</code> |
− | After=network.target | + | <code>[Service]</code> |
− | + | <code>Type=simple</code> | |
− | [Service] | + | <code>ExecStart=/usr/local/bin/service-monitor.sh</code> |
− | Type=simple | + | <code>Restart=always</code> |
− | ExecStart=/usr/local/bin/service-monitor.sh | + | <code>RestartSec=60</code> |
− | Restart=always | + | <code>[Install]</code> |
− | RestartSec=60 | + | <code>WantedBy=multi-user.target</code> |
− | |||
− | [Install] | ||
− | WantedBy=multi-user.target | ||
− | </code> | ||
3. Создайте таймер для мониторинга: | 3. Создайте таймер для мониторинга: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system/service-monitor.timer</code> |
− | sudo nano /etc/systemd/system/service-monitor.timer | ||
− | </code> | ||
4. Добавьте содержимое: | 4. Добавьте содержимое: | ||
− | <code> | + | <code>[Unit]</code> |
− | [Unit] | + | <code>Description=Run service monitor every 5 minutes</code> |
− | Description=Run service monitor every 5 minutes | + | <code>Requires=service-monitor.service</code> |
− | Requires=service-monitor.service | + | <code>[Timer]</code> |
− | + | <code>OnCalendar=*:0/5</code> | |
− | [Timer] | + | <code>Persistent=true</code> |
− | OnCalendar=*:0/5 | + | <code>[Install]</code> |
− | Persistent=true | + | <code>WantedBy=timers.target</code> |
− | |||
− | [Install] | ||
− | WantedBy=timers.target | ||
− | </code> | ||
5. Включите и запустите: | 5. Включите и запустите: | ||
− | <code> | + | <code>sudo systemctl enable service-monitor.timer</code> |
− | sudo systemctl enable service-monitor.timer | + | <code>sudo systemctl start service-monitor.timer</code> |
− | sudo systemctl start service-monitor.timer | ||
− | </code> | ||
== 12. Оптимизация производительности === | == 12. Оптимизация производительности === | ||
Строка 576: | Строка 415: | ||
1. Отредактируйте настройки systemd: | 1. Отредактируйте настройки systemd: | ||
− | <code> | + | <code>sudo nano /etc/systemd/system.conf</code> |
− | sudo nano /etc/systemd/system.conf | ||
− | </code> | ||
2. Добавьте настройки: | 2. Добавьте настройки: | ||
− | <code> | + | <code>[Manager]</code> |
− | [Manager] | + | <code>DefaultLimitNOFILE=65536</code> |
− | DefaultLimitNOFILE=65536 | + | <code>DefaultLimitNPROC=32768</code> |
− | DefaultLimitNPROC=32768 | + | <code>DefaultTasksMax=32768</code> |
− | DefaultTasksMax=32768 | ||
− | </code> | ||
3. Перезапустите systemd: | 3. Перезапустите systemd: | ||
− | <code> | + | <code>sudo systemctl daemon-reload</code> |
− | sudo systemctl daemon-reload | ||
− | </code> | ||
=== Мониторинг производительности === | === Мониторинг производительности === | ||
1. Создайте скрипт мониторинга производительности: | 1. Создайте скрипт мониторинга производительности: | ||
− | <code> | + | <code>sudo nano /usr/local/bin/systemd-stats.sh</code> |
− | sudo nano /usr/local/bin/systemd-stats.sh | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>echo "=== SystemD Performance Statistics ==="</code> |
− | + | <code>echo "Active Services: $(systemctl list-units --state=active | wc -l)"</code> | |
− | + | <code>echo "Failed Services: $(systemctl list-units --state=failed | wc -l)"</code> | |
− | echo "=== SystemD Performance Statistics ===" | + | <code>echo "System Uptime: $(systemctl show --property=ActiveEnterTimestamp --value)"</code> |
− | echo "Active Services: $(systemctl list-units --state=active | wc -l)" | + | <code>echo "Memory Usage: $(ps aux | grep systemd | grep -v grep | awk '{print $4"%"}')"</code> |
− | echo "Failed Services: $(systemctl list-units --state=failed | wc -l)" | + | <code>echo "CPU Usage: $(ps aux | grep systemd | grep -v grep | awk '{print $3"%"}')"</code> |
− | 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"%"}')" | ||
− | </code> | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /usr/local/bin/systemd-stats.sh</code> |
− | sudo chmod +x /usr/local/bin/systemd-stats.sh | ||
− | </code> | ||
== Заключение == | == Заключение == |
Версия 20:00, 14 октября 2025
Содержание
- 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 и оптимизацией производительности вашего сервера!