start-stop-daemon не запускается, потому что: “процесс уже запущен”

Вопрос или проблема

У меня есть скрипт инициализации для запуска qbittorrent-nox на моем сервере. Он работает нормально, когда я впервые запускаю сервер, но если я останавливаю процесс qbittorrent-nox (service qbittorrent stop), он не запускается снова (service qbittorrent start), с этой ошибкой:

процесс уже запущен.

Я уверен, что никакой процесс не запущен, я проверил с помощью ps. вот точная команда для запуска:

start-stop-daemon --start --chdir '/home/testuser' --user 'testuser' --chuid 'testuser:testuser' --startas /usr/bin/env HOME="/home/testuser" /usr/bin/qbittorrent-nox

В /run нет файлов, связанных с qbittorrent.

Указание --user без других соответствующих опций заставляет start-stop-daemon считать, что демон работает, если найден любой процесс, принадлежащий этому пользователю. Как описано в man 8 start-stop-daemon:

Примечание: Использование этой опции соответствия само по себе приведет к действию на все
процессы, соответствующие пользователю.

В этом случае вы должны указать либо --exec /usr/bin/qbittorrent-nox, либо соответствующее имя процесса с --name.

Ответ или решение

Проблема, с которой вы столкнулись при использовании команды start-stop-daemon для управления процессом qbittorrent-nox, заключается в том, что система считает, что процесс уже запущен, даже если вы его остановили. Это связано с тем, как работает механизм идентификации процессов в start-stop-daemon.

Причины проблемы

  1. Неправильное использование опции --user: Используя опцию --user, вы заставляете start-stop-daemon проверять все процессы, принадлежащие указанному пользователю (testuser). Если среди запущенных процессов есть хотя бы один, он будет рассматриваться как активный процесс, и daemon не будет запускать новый экземпляр.

  2. Отсутствие уникального идентификатора процесса: Отсутствие параметров --exec или --name делает start-stop-daemon неразборчивым в определении, какой именно процесс ему нужно искать среди всех процессов пользователя. В результате, даже если qbittorrent-nox не запущен, программа определяет, что процесс от имени testuser активен.

Рекомендации по решению проблемы

Чтобы решить эту проблему, вы можете использовать один из следующих подходов:

  1. Уточните команду с помощью параметра --exec:
    Измените вашу команду start-stop-daemon так, чтобы она включала параметр --exec, который указывает на полный путь к исполняемому файлу, который вы хотите запустить. Это позволит start-stop-daemon точно идентифицировать процесс qbittorrent-nox. Модифицированная команда будет выглядеть следующим образом:

    start-stop-daemon --start --chdir '/home/testuser' --user 'testuser' --chuid 'testuser:testuser' --exec /usr/bin/qbittorrent-nox --startas /usr/bin/env HOME="/home/testuser"
  2. Используйте параметр --name:
    В дополнение к --exec вы также можете использовать параметр --name, указав имя процесса, которое вы хотите отслеживать. Однако, если у вас могут быть другие процессы с тем же именем, это может вызвать проблемы.

    Пример с использованием --name:

    start-stop-daemon --start --chdir '/home/testuser' --user 'testuser' --chuid 'testuser:testuser' --name qbittorrent-nox --startas /usr/bin/env HOME="/home/testuser" /usr/bin/qbittorrent-nox
  3. Проверка на зависшие процессы:
    В редких случаях может случиться так, что процесс не завершился корректно и остался "зависшим". Убедитесь, что нет остатков от предыдущих процессов. Используйте следующую команду для выявления ВСЕХ процессов, связанных с qbittorrent-nox или именем пользователя:

    ps aux | grep qbittorrent

    Если вы обнаружите висячие процессы, завершите их с помощью:

    kill <PID>

    где <PID> — это идентификатор процесса, который нужно завершить.

Заключение

Учитывая вышеуказанные методы, вы сможете устранить проблему с запуском qbittorrent-nox с помощью start-stop-daemon. Корректное использование параметров командной строки не только поможет избежать ошибки "process already running", но и повысит надежность управления вашим демоном. Если у вас есть дополнительные вопросы или требуется помощь, не стесняйтесь обратиться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...