Перейти до змісту

⚙️ Система, Процеси та Сервіси

Адміністрування операційної системи, керування правами доступу та фоновими процесами (демонами).


Системні логи (Logs)

У Linux більшість подій реєструється в системних журналах. Це основний інструмент для діагностики.

journalctl - Головний журнал

Журнал системних подій (systemd). Зберігає інформацію про роботу ядра, служб та програм.

Команда Опис
journalctl -n 20 Показати останні 20 записів.
journalctl -f Follow. Моніторинг журналу в реальному часі.
journalctl -u ssh Показати логи конкретного сервісу (наприклад, SSH).
journalctl -xe Показати розширену інформацію про помилки (часто система просить це ввести).
journalctl --since "1 hour ago" Що сталося за останню годину?

dmesg - Логи ядра

Містить повідомлення ядра (драйвери, апаратне забезпечення, живлення).

dmesg | tail      # Останні повідомлення
dmesg -w          # В реальному часі (вставте флешку і побачите магію)
dmesg | grep -i error # Знайти всі помилки (ігноруючи регістр)

Процеси (Processes)

Управління процесами та моніторинг ресурсів.

htop - Диспетчер завдань

Набагато кращий за top.

  • F3 (Search): Знайти процес за назвою.
  • F4 (Filter): Показати тільки певні процеси (наприклад, тільки python).
  • F9 (Kill): Вбити вибраний процес.
  • Клік мишкою: Можна сортувати колонки (CPU%, MEM%).

Швидка інформація про систему

free -h          # Скільки RAM використовується
lscpu            # Інформація про процесор
nproc            # Кількість ядер CPU
uptime           # Як довго працює система + навантаження

Командний рядок

Команда Приклад Пояснення
ps aux ps aux \| grep python Показати всі процеси та відфільтрувати тільки Python.
kill kill 1234 Надіслати сигнал завершення (SIGTERM).
kill -9 kill -9 1234 Примусове завершення (SIGKILL). Використовуйте, якщо процес не відповідає.

watch - Моніторинг в реальному часі

Команда watch виконує іншу команду кожні N секунд.

watch -n 1 'ps aux | grep python'  # Оновлювати кожну секунду
watch df -h                         # Слідкувати за вільним місцем


Створення власного демона (Service)

Рекомендований спосіб запуску фонових процесів (ботів, веб-серверів) - створення Systemd Service.

Він вміє:

  1. Запускати скрипт при старті системи.
  2. Перезапускати його, якщо він впаде (помилка в коді).
  3. Писати логи в загальний журнал.

Крок 1. Створення файлу

Створимо файл конфігурації:

sudo nano /etc/systemd/system/mybot.service

Крок 2. Конфігурація (з деталями)

[Unit]
# Короткий опис, що це за сервіс (видно в status)
Description=My Super Telegram Bot

# Порядок запуску. network.target означає "чекати, поки з'явиться інтернет".
# Якщо боту треба база даних, можна додати: After=postgresql.service
After=network.target

[Service]
# Від імені якого користувача запускати скрипт. 
# ВАЖЛИВО: Не запускайте від root без потреби!
User=pi
Group=pi

# Робоча папка. Це аналог команди `cd /home/pi/my_bot` перед запуском.
WorkingDirectory=/home/pi/my_bot

# Команда запуску. 
# ЛАЙФХАК: Вказуйте ПОВНИЙ шлях до Python у вашому віртуальному середовищі (venv).
# Так вам не треба нічого активувати вручну.
ExecStart=/home/pi/my_bot/venv/bin/python main.py

# Автоматичний перезапуск.
# always = перезапускати завжди (при помилці, при kill, при завершенні).
# on-failure = тільки якщо впав з помилкою.
Restart=always

# Зачекати 5 секунд перед перезапуском (щоб не "спамити" стартами, якщо помилка постійна).
RestartSec=5

# Що робити з логами (стандартний вивід print()).
# Вони полетять в journalctl.
StandardOutput=inherit
StandardError=inherit

[Install]
# Цей рядок каже системі: "Запустити цей сервіс, коли завантажиться режим Multi-User" 
# (звичайний режим роботи Linux).
WantedBy=multi-user.target

Крок 3. Активація

# 1. Сказати systemd перечитати файли (робити після кожної зміни файлу .service)
sudo systemctl daemon-reload

# 2. Додати в автозавантаження (Enable)
sudo systemctl enable mybot

# 3. Запустити прямо зараз (Start)
sudo systemctl start mybot

Крок 4. Керування

  • Статус: sudo systemctl status mybot (покаже, чи працює, і останні логи).
  • Логи: journalctl -u mybot -f (читати print-и бота в реальному часі).

Планувальник завдань (cron)

Якщо треба запустити щось за розкладом (наприклад, бекап раз на день), а не щоб воно висіло в пам'яті постійно.

crontab -e

Формат: хвилини години день місяць день_тижня команда

Приклади:

# Запускати скрипт кожні 10 хвилин
*/10 * * * * /usr/bin/python3 /home/pi/backup.py

# Запускати о 3:00 ночі щодня
0 3 * * * /home/pi/backup_db.sh

# Перезавантажувати RPi кожен понеділок о 5 ранку
0 5 * * 1 sudo reboot

Crontab Guru

Синтаксис cron важкий. Використовуйте сайт crontab.guru, щоб перевірити свій розклад.


Права доступу (Permissions)

Числа в chmod

Часто ви бачите chmod 777 або 755. Що це значить? Це сума прав:

  • 4 = Read (читати)
  • 2 = Write (писати)
  • 1 = Execute (запускати)

Три цифри - це (1) Власник, (2) Група, (3) Інші.

  • 7 (4+2+1) = Все дозволено.
  • 5 (4+1) = Читати і Запускати (але не редагувати).
  • 6 (4+2) = Читати і Писати.

Приклади:

  • chmod 755 script.py -> Повний доступ власнику, іншим - читання/виконання. (Стандарт для програм).
  • chmod 600 secret.key -> Читання/запис тільки для власника, іншим - заборонено. (Для SSH ключів).
  • chmod +x script.sh -> Просто додати право запуску всім (найчастіша команда).