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

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

Текущая версия на 10:40, 15 октября 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 и оптимизацией производительности вашего сервера!