Выполнение останавливается на удаленном сервере ssh

Я пытаюсь запустить Quantum ESPRESSO на удаленном сервере через SSH в Linux терминале с моей машины.

Для этого я запускаю двоичную исполняемую программу с текстовым входным файлом в виде:

$ mpirun -np 20 pw.x < input.in > output.out
  

Программа успешно выполняется, но в какой-то момент времени (через 2 часа) останавливается и не записывает результаты в выходной файл.

Что я могу сделать, чтобы снова выполнить программу с того места, где она остановилась, так как я не хочу запускать ее с нуля (так как она занимает много времени)?

Какова может быть причина остановки?

Как я могу выполнить ее снова.

Пожалуйста, помогите. У меня заканчиваются улики с этим.

Спасибо!

1
задан 5 March 2021 в 11:55

1 ответ

На основе раздела комментариев: Скорее всего, сценарий будет прерван удаленной ОС, когда соединение SSH будет закрыто либо удаленным сервером, либо локальным компьютером.

Почему удаленный компьютер закрывает соединение?

Это конфигурация безопасности по умолчанию для SSH-серверов - закрытие сеанса, когда достигнуто максимально допустимое время сеанса или достигнуто максимально допустимое время простоя.

Почему процессы, запущенные удаленным пользователем, завершаются после выхода из системы?

Ответ еще более прост, чем причины безопасности: ssh logout почти эквивалентен локальному пользователю, выходящему из своей системы, тем самым завершая все процессы, запущенные ими. Система посылает SIGHUP каждому процессу - сигнал , который заставляет их начать процедуру завершения.

Как избежать прекращения этого процесса после выхода из системы ssh?

После подключения к удаленной машине с помощью SSH можно просто запустить команду/сценарий с помощью nohup , чтобы игнорировать этот сигнал при выходе из системы:

nohup <script_or_program> &

В вашем случае:

nohup mpirun -np 20 pw.x < input.in > output.out &

Каждый процесс, который мы хотим продолжить после выхода, должен быть запущен с помощью nohup .

Важное примечание о nohup:

Если наш процесс не завершится сам по себе, с этого пункта, если мы хотим завершить его вручную (по удаленному или локальному соединению), нам придется вручную отправить в процесс сигнал SIGKILL с помощью команды kill : убейте -9 < process_id>

1
ответ дан 18 March 2021 в 23:28

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

Похожие вопросы: