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