1

У меня есть скрипт, который запускает сервер на удаленной виртуальной машине. Все прекрасно работает, пока я не закрою оболочку, где я выполнил скрипт. Когда оболочка закрывается, сервер тоже. После осмотра я обнаружил следующее:

  1. & отправит задание на задний план при выполнении с символом
  2. disown -h отключит задание от оболочки и позволит запустить его независимо от оболочки.

Команда, которую я использовал:

./startServer.sh nasb_wxscat160_catalog-4.1.6 1.0.8 > catalog-log.txt & disown -h

Когда я закрыл оболочку и проверил, используя ps -ef | grep java чтобы увидеть, если работа все еще работает, я видел это в списке. Однако, когда я пытался подключиться к серверу, это было не отвечает.

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

Кто-нибудь сталкивался с чем-то подобным?

2 ответа2

2

Для одноразовых работ, которые не демонизируют себя, я обычно запускаю их в сеансе экрана. Недостатком является то, что вы должны запустить экран перед началом работы. Мой процесс обычно выглядит примерно так:

% screen -D -R   # start a new screen session, with reattachment options
% command_to_run_job
ctrl-A ctrl-D

Это запустит задание на переднем плане, а затем отсоединится от сеанса экрана. Затем вы можете выйти из системы, а затем снова подключиться к ней с помощью другого "screen -D -R"

0

Другая вещь, которую вы можете сделать, это использовать supervisord или circus для запуска вашей программы и убедиться, что она автоматически перезапустится, если она остановится.

http://circus.readthedocs.org

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .