Управление процессами и службами (systemd) — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Управление процессами и службами (systemd) = == 1. Подготовка системы == * Войдите в систему по…»)
 
Строка 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>
#!/bin/bash
+
<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>
    if ! systemctl is-active --quiet $service; then
+
<code>MEMORY_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')</code>
        echo "ALERT: Service $service is not running" | mail -s "Service Alert" admin@example.com
+
<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>
        systemctl start $service
+
<code>fi</code>
    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
 
</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>
#!/bin/bash
+
<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

Содержание

Управление процессами и службами (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 и оптимизацией производительности вашего сервера!