nohup на bash redhat - это один процесс

328
Allen

Я использую Capistrano для развертывания службы Python. Я пытался как запустить службу, так и написать pid-файл, чтобы я мог перезапустить службу или остановить службу позже. Проблема в том, что pid-файл всегда на один идентификатор процесса позади, и я не знаю почему. Например, если в pid-файле указано 123, то фактически выполняющийся процесс - 124. Должен ли я добавить его вручную? Или я неправильно пишу команду? Я напишу здесь команду psuedo:

nohup python ./service.py special_argument --config /some_folder/devel.yml --log logs/service.log > /dev/null 2>&1& echo $! > /some_folder/pids/special_argument.pidfile 
0
Если это услуга, зачем вообще нужен nohup? grawity 8 лет назад 0
Ваш сервис, вероятно, делает форк и exec. Вы фиксируете PID родительского процесса, который завершается, но остается разветвленный дочерний процесс. Karen B 8 лет назад 0
может быть, не совсем служба .... это долгосрочный скрипт, который мы постоянно обновляем. Что касается форка и exec, я так не думаю, потому что это просто чистый питон. Мы не используем никаких потоков. это просто отдельный процесс. Мы можем запустить процесс вручную, используя скрипт bash, и он работает нормально, но было бы лучше, если бы мы могли запустить его с capistrano. Allen 8 лет назад 0
Вы также можете захватывать PID порождений оболочки capistrano для выполнения своих задач. Не зная, как вы захватываете PID (код?), Остальное - догадки. Karen B 8 лет назад 0
Кроме того, просто для подтверждения, вы открыли скрипт Python и убедились, что он не вызывает fork, правильно? Сценарии Python могут сделать это. Karen B 8 лет назад 0
нет. это единый процесс. Если под вилкой вы подразумеваете, что он использует os.fork или что-то еще, то это не так. Я смог обойти это, когда python написал сам pidfile. Allen 8 лет назад 0

1 ответ на вопрос

0
Allen

Обошли это, делегировав скрипт python для написания собственного pid-файла.