Диагностика и исправление troubleshooting Обновлено 8 Все платформы

Xray: failed to start — что проверить в конфиге и службе

Ошибка failed to start у Xray обычно связана с конфигурацией, правами или службой. Разбираем частые причины и способы их устранения.

xrayfailed to startsystemdjsonport
Содержание
КороткоЕсли Xray не стартует, проверьте JSON-конфиг на ошибки, занятость портов, права на файлы и каталоги, корректность юнита systemd, а также соответствие версии бинарника и конфига.

Xray — мощный инструмент для проксирования, но иногда он отказывается запускаться. Ошибка failed to start может появиться в логах systemd или при ручном запуске. Чаще всего проблема кроется в конфигурационном файле, правах доступа или несовместимости версий. В этой статье разберем, как системно подойти к диагностике и устранить неполадку.

Прежде чем менять что-либо, важно понять: Xray не запускается либо из-за синтаксической ошибки в конфиге, либо из-за внешних ограничений — занятый порт, недостаточно прав, некорректный юнит systemd. Ниже — пошаговый план, который поможет выявить и исправить причину.

Проверка конфигурационного файла

Самый частый виновник — поврежденный или невалидный JSON. Xray требует строгого соблюдения формата: каждая запятая, скобка и кавычка на месте. Даже лишний пробел может привести к ошибке.

Валидация JSON

Проверьте синтаксис с помощью утилиты jq или python. Например, команда jq empty /etc/xray/config.json выведет ошибку, если JSON некорректен. Если jq не установлен, используйте python3 -m json.tool /etc/xray/config.json. Обратите внимание на типичные ошибки: отсутствие запятой между элементами, лишняя запятая после последнего элемента, незакрытые скобки, одинарные кавычки вместо двойных.

Структура конфига

Убедитесь, что основные секции на месте. Минимальный конфиг должен содержать объект inbounds и outbounds. Например, inbound с типом socks или http. Если поле port указано, оно должно быть числом, а не строкой. Проверьте, что все ссылки на другие файлы (например, сертификаты) существуют и доступны.

Проверка портов и доступности

Если JSON в порядке, следующая частая причина — порт уже занят другим процессом или недоступен. Xray не сможет запуститься, если порт из конфига уже используется.

Определение занятых портов

Используйте команду ss -tulpn | grep порт или netstat -tulpn | grep порт, чтобы увидеть, какой процесс слушает нужный порт. Если порт занят, либо остановите конфликтующий процесс, либо измените порт в конфиге. Также проверьте, что порт не заблокирован файрволом — временно отключите его для теста.

Права на порты

Порты ниже 1024 требуют прав root. Если вы запускаете Xray от обычного пользователя и указали порт 80, 443 или 8080, будет ошибка permission denied. Решение — использовать порт выше 1024 или настроить capability. В systemd можно добавить AmbientCapabilities=CAP_NET_BIND_SERVICE в юнит.

Проблемы с правами доступа

Xray должен иметь доступ к своим файлам: конфигу, логам, сертификатам. Если права выставлены неверно, процесс завершится с ошибкой.

Права на каталоги

Убедитесь, что пользователь, от которого запускается Xray, имеет право читать конфиг и записывать логи. Обычно это пользователь nobody или xray. Выполните chown -R nobody:nogroup /etc/xray и chmod -R 644 /etc/xray для файлов, chmod 755 для каталогов. Логи должны быть доступны для записи: chown nobody:nogroup /var/log/xray.

Проверка службы systemd

Если Xray установлен как служба, ошибка может быть в юните systemd. Неправильный путь к бинарнику или конфигу, отсутствие прав на запуск — все это приводит к failed to start.

Логи systemd

Сначала посмотрите статус службы: systemctl status xray. Вывод покажет последние строки лога. Если логов мало, используйте journalctl -u xray -e для полного лога. Ищите строки error или failed. Часто там будет точная причина — например, не найден файл или ошибка конфигурации.

Настройка юнита

Откройте файл юнита (/etc/systemd/system/xray.service или аналогичный). Проверьте параметры ExecStart и User. ExecStart должен указывать на реальный путь к бинарнику, например /usr/local/bin/xray. Убедитесь, что бинарник существует и исполняем. Также проверьте, что User и Group имеют доступ к конфигу.

После любых изменений в юните выполните systemctl daemon-reload и затем systemctl restart xray.

Несовпадение версий бинарника и конфига

Иногда проблема кроется в несовместимости версий. Старые версии Xray могут не понимать новые поля конфига, и наоборот. Например, если вы обновили конфиг, но не обновили бинарник, или наоборот.

Проверка версии

Узнайте версию бинарника: xray version или /usr/local/bin/xray version. Сравните с документацией. Если конфиг использует функции, которых нет в вашей версии, замените их на поддерживаемые или обновите Xray. Также проверьте, что бинарник не поврежден — сравните контрольную сумму с официальной, если это возможно.

Пошаговая диагностика

  1. Проверьте статус службы: systemctl status xray.
  2. Просмотрите логи: journalctl -u xray -e.
  3. Запустите Xray вручную с тем же конфигом: xray run -config /etc/xray/config.json. Вы увидите ошибку в терминале.
  4. Проверьте JSON на валидность: jq empty /etc/xray/config.json.
  5. Проверьте порты: ss -tulpn | grep порт.
  6. Проверьте права на файлы и каталоги: ls -la /etc/xray, ls -la /var/log/xray.
  7. Проверьте версию бинарника и соответствие конфига.

Ограничения и безопасность

При диагностике не отключайте файрвол на постоянной основе — только для теста. Также не запускайте Xray от root без необходимости. Используйте принцип наименьших привилегий. Если вы меняете права, убедитесь, что не открываете лишнего доступа. И помните: некоторые ошибки могут быть связаны с неправильными сертификатами TLS. Проверьте, что файлы сертификатов существуют и доступны для чтения пользователю Xray.

Если после всех шагов проблема осталась, обратитесь к официальной документации или сообществу. Укажите полный лог ошибки и версию Xray — это ускорит поиск решения.

Мини-чеклист

  • Проверить валидность JSON: jq empty /etc/xray/config.json
  • Убедиться, что порты не заняты: ss -tulpn | grep порт
  • Проверить права на /etc/xray и /var/log/xray
  • Просмотреть логи systemd: journalctl -u xray -e
  • Сравнить версию бинарника и требования конфига

Частые ошибки

  • Лишняя запятая в JSON или одинарные кавычки вместо двойных
  • Указание порта ниже 1024 без прав root или capabilities
  • Запуск Xray от пользователя без доступа к конфигу
  • Игнорирование логов systemd, где есть точная причина
  • Несоответствие версий: новый конфиг со старым бинарником

FAQ

Почему Xray не стартует после обновления?

Часто после обновления меняются поля конфига. Проверьте, что ваш конфиг совместим с новой версией, и при необходимости обновите его.

Как быстро узнать причину ошибки?

Запустите Xray вручную: xray run -config /etc/xray/config.json. Ошибка появится в терминале.

Что делать, если порт занят?

Найдите процесс, занимающий порт, и остановите его, либо измените порт в конфиге.

Нужно ли менять права на конфиг?

Да, пользователь, от которого запускается Xray, должен иметь право читать конфиг. Обычно достаточно chmod 644.

Нужен быстрый рабочий доступ?

Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.

Получить доступ

Дальше по теме

Связанные статьи