Обошли это, делегировав скрипт python для написания собственного pid-файла.
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
Если это услуга, зачем вообще нужен 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
Похожие вопросы
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
10
Как я могу найти в истории bash и повторно запустить команду?
-
-
2
Можно ли передать выходные данные одной команды двум другим командам?
-
8
Переименуйте группу файлов одной командой
-
1
Скрипт Perl, работающий от имени root, не может выполнять действия root
-
2
Почему мой путь не обновляется * сейчас *?
-
5
Как удалить символическую ссылку на каталог?
-
8
Спаси меня от бессмысленного терминала
-
9
Как можно добавить номер строки и табуляцию к каждой строке текстового файла?