1️⃣ Быстрая проверка статуса
systemctl status myservice -n 20 --no-pager
Смотрим:
Loaded
Active
ExecStart
последние строки логов
2️⃣ Смотрим реальные ошибки из journal
journalctl -u myservice -xe --no-pager
Частые сообщения:
Permission denied
No such file or directory
Address already in use
Failed to bind
Unit entered failed state
3️⃣ Проверяем unit-файл
systemctl cat myservice
Ошибки часто здесь:
неправильный путь в ExecStart
забыли daemon-reload
лишний User=
отсутствующая рабочая директория
Проверка синтаксиса:
systemd-analyze verify /etc/systemd/system/myservice.service
4️⃣ Типовые причины, которые встречаются чаще всего
🤩 Неверный путь к бинарнику:
ExecStart=/usr/bin/appФайл не существует и сервис не стартует.
🤩 Порт уже занят
ss -lntp | grep 8080
🤩 Неправильные права
ls -l /path/to/app
Нужно проверить владельца и execute-бит.
🤩 Ошибка в конфиге приложения. Попробуй запустить вручную:
sudo -u serviceuser /usr/bin/app
🛠 Небольшой скрипт диагностики
#!/bin/bash
SERVICE="$1"
echo "=== STATUS ==="
systemctl status "$SERVICE" -n 10 --no-pager
echo
echo "=== LAST ERRORS ==="
journalctl -u "$SERVICE" -n 20 --no-pager
echo
echo "=== UNIT FILE ==="
systemctl cat "$SERVICE"
echo
echo "=== PORT CHECK ==="
ss -lntp | grep "$(systemctl show "$SERVICE" -p ExecStart --value | awk '{print $1}')" 2>/dev/null
Запуск:
./diag.sh nginx
BashTex 📱 #bash #utils