Как оживить процесс nohup?

Я использую команду nohup с Python и Flask для фонового процесса. После того, как я закрываю терминал, он работает нормально, но через 1 или 2 дня процесс останавливается. Может кто-нибудь сказать мне, как сохранить фоновый процесс? Я использую команду ниже:

screen
space
nohup python -m flask run --cert local.crt --key local.key --host=0.0.0.0 --port=443 &
ctrl+a+d

Я предлагаю вам запустить Flask в течение двух дней без nohup, чтобы увидеть, не вызывает ли это какую-либо ошибку.

Mikah 28.12.2020 15:05

Вероятно, для этой цели вам следует использовать демон свойств, например gunicorn.

Ken Kinder 29.12.2020 23:36

@KenKinder, пожалуйста, не могли бы вы подробно объяснить, как использовать демона, такого как пушка?

Nirdesh Kumawat 30.12.2020 06:40

Я бы порекомендовал использовать что-то вроде службы systemctl для таких целей, которые обеспечивают дополнительную поддержку автоматического перезапуска вашей службы в случае ее сбоя или сбоя и обеспечения ее работы.

Amit Singh 01.01.2021 17:15
nohup не запускает процесс в фоновом режиме. Это просто заставляет его игнорировать сигнал HUP.
Amit Singh 01.01.2021 17:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
1 830
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Попробуйте nohup python -m flask run --cert local.crt --key local.key --host=0.0.0.0 --port=443 >/dev/null 2>&1&
Используйте nohup , вы должны перенаправить печать на /dev/null или log, иначе будет создан файл nohup.out, занимающий место на диске.

В большинстве случаев мы используем gunicorn и supervisor для управления приложением flask.

Можете ли вы сказать мне, как использовать гуникорн в колбе?

Nirdesh Kumawat 30.12.2020 06:40
pip install gunicorn тогда беги gunicorn -d -b 0.0.0.0:443 --certfile=local.crt --keyfile=local.key [app_file:app_name]
chseng 30.12.2020 09:12
Ответ принят как подходящий

Предположим, что весь ваш код Flask находится в папке /home/abc_user/flask_app.

Шаги

  1. Создайте файл flask-server.service в /etc/systemd/system.

     [Unit]
     Description=Flask server
     After=network.target
    
     [Service]
     User=abc_user
     Group=abc_user
     WorkingDirectory=/home/abc_user/flask_app
     ExecStart=python -m flask run --cert local.crt --key local.key --host=0.0.0.0 --port=443
     Restart=always
    
     [Install]
     WantedBy=multi-user.target
    
  2. Беги sudo systemctl daemon-reload.

  3. Запустите сервис с помощью systemctl start flask-server.service.

  4. Убедитесь, что он начался systemctl status flask-server.service. В статусе должно быть написано "работает".

  5. Если вы хотите, чтобы ваш фляжный сервер автоматически запускался после перезагрузки, запустите systemctl enable flask-server.service

Некоторые общие операции

  1. Проверить текущий статус - systemctl status flask-server.service
  2. Запустить сервис - systemctl start flask-server.service
  3. Остановить службу - systemctl stop flask-server.service
  4. Проверить логи - journalctl -u flask-server.service
  5. Логи стрима - journalctl -f -u flask-server.service
  6. Проверить логи за последний час - journalctl -u flask-server.service --since "1 hour ago"

Спасибо. Я получаю сообщение об ошибке /etc/systemd/system/flask-server.service:9: Исполняемый файл "python" не найден в пути "/usr/local/sbin:/usr/local/" при запуске - systemctl status flask-server.service

Nirdesh Kumawat 05.01.2021 17:38

Замените python выводом which python

Amit Singh 05.01.2021 18:26

Предыдущая ошибка была устранена. Теперь я получаю сообщение об ошибке Loaded: loaded (/etc/systemd/system/flask-server.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2021-01-05 17:37:19 UTC; 5s ago Process: 1418725 ExecStart=/usr/bin/which python -m flask run --cert local.crt --key local.key --host=0.0.0.0 --port=443 (code=exited, status=217/USER) Main PID: 1418725 (code=exited, status=217/USER)

Nirdesh Kumawat 05.01.2021 18:39

Там написано (code=exited, status=217/USER), что означает, что пользователя не существует или вы могли допустить ошибки при его добавлении. Смотрите это

Amit Singh 05.01.2021 19:44

Теперь я получаю ошибку Loaded: loaded (/etc/systemd/system/flask-server.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Tue 2021-01-05 19:05:37 UTC; 5s ago Process: 1419532 ExecStart=/usr/bin/which python -m flask run --cert local.crt --key local.key --host=0.0.0.0 --port=443 (code=exited, status=1/FAILURE) Main PID: 1419532 (code=exited, status=1/FAILURE)

Nirdesh Kumawat 05.01.2021 20:14

Пожалуйста, проверьте журналы с помощью команды journalctl, упомянутой в вопросе, и поделитесь ими. Одна проблема, которую я вижу, заключается в том, что вы написали путь python как /usr/bin/which python вместо вывода which python, который возвращает /usr/bin/python в моей системе. Поэтому я бы заменил /usr/bin/which python на /usr/bin/python

Amit Singh 05.01.2021 20:21

Давайте продолжим обсуждение в чате.

Nirdesh Kumawat 05.01.2021 20:40

Возможно, вы выключили компьютер, на котором работает фляжный сервер? Если это так, проблема будет решена, либо не выключая компьютер, либо снова запуская фляжный сервер после выключения!

nohup — это команда POSIX для игнорирования сигнала HUP (зависания). Сигнал HUP, по соглашению, является способом, которым терминал предупреждает зависимые процессы о выходе из системы.

Вывод, который обычно поступает на терминал, поступает в файл с именем nohup.out, если он еще не был перенаправлен.

См. nohup.out для поиска ошибок в ./ или исполняемом каталоге. Это не ошибка nohup. Посмотрите nohup.out и ошибку Google и обновите вопрос.

Другие вопросы по теме