Вопрос или проблема
У меня есть скрипт инициализации для запуска 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
.
Причины проблемы
-
Неправильное использование опции
--user
: Используя опцию--user
, вы заставляетеstart-stop-daemon
проверять все процессы, принадлежащие указанному пользователю (testuser
). Если среди запущенных процессов есть хотя бы один, он будет рассматриваться как активный процесс, иdaemon
не будет запускать новый экземпляр. -
Отсутствие уникального идентификатора процесса: Отсутствие параметров
--exec
или--name
делаетstart-stop-daemon
неразборчивым в определении, какой именно процесс ему нужно искать среди всех процессов пользователя. В результате, даже еслиqbittorrent-nox
не запущен, программа определяет, что процесс от имениtestuser
активен.
Рекомендации по решению проблемы
Чтобы решить эту проблему, вы можете использовать один из следующих подходов:
-
Уточните команду с помощью параметра
--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"
-
Используйте параметр
--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
-
Проверка на зависшие процессы:
В редких случаях может случиться так, что процесс не завершился корректно и остался "зависшим". Убедитесь, что нет остатков от предыдущих процессов. Используйте следующую команду для выявления ВСЕХ процессов, связанных сqbittorrent-nox
или именем пользователя:ps aux | grep qbittorrent
Если вы обнаружите висячие процессы, завершите их с помощью:
kill <PID>
где
<PID>
— это идентификатор процесса, который нужно завершить.
Заключение
Учитывая вышеуказанные методы, вы сможете устранить проблему с запуском qbittorrent-nox
с помощью start-stop-daemon
. Корректное использование параметров командной строки не только поможет избежать ошибки "process already running", но и повысит надежность управления вашим демоном. Если у вас есть дополнительные вопросы или требуется помощь, не стесняйтесь обратиться за поддержкой.