ssh, nohup, затем скопируйте результаты обратно - PullRequest
1 голос
/ 15 июля 2011

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

  • ssh на удаленной машине;периодически запускать сценарий matlab
  • , чтобы проверить, выполнено ли задание.
  • когда задание выполнено, я вручную scp возвращаю файлы, содержащие результаты, на свою домашнюю машину.1011 *

    Я пытался использовать такие строки в моем скрипте для выполнения этой работы (обратите внимание, что скрипт выполняется на моем компьютере):

    ssh nohup matlab -r theScript; exit;
    scp remote@~/files ~/files
    

    Это не работает.Через некоторое время сеанс ssh заканчивается, и сценарий просто выполняет scp, даже если задание еще не завершено и файлы еще не существуют.

    Я думаю, что мне нужно периодически проверятьвыполняется ли эта работа, возможно, путем ssh'ing периодически и читая файл nohup.out в поисках сигнала DONE!, используя grep.Затем, когда я это вижу, скопируйте файлы обратно.Но это кажется сложным, и я не знаю, как вернуть сообщение DONE! на мой компьютер для условного запуска (если вы видите сигнал DONE, делайте это ...) какие-нибудь идеи?

Ответы [ 3 ]

1 голос
/ 15 июля 2011

Кажется, есть способ настроить это в вашем ssh_config.

Эта страница объясняет, как: http://nileshbansal.blogspot.com/2007/02/prevent-timeouts-in-ssh.html

1 голос
/ 15 июля 2011

Да, ssh может быть тайм-аут или что-то.Так что да, вам лучше всего опросить.например,

RUN="$(date +%Y%m%d-%H%M%S)"
ssh remote " nohup bash -c \"( matlab -r theScript; echo \$? > $RUN.done ) >$RUN.log 2>&1 </dev/null &\" "
DONE=""
while [ -z "$DONE" ]
do
    sleep 60
    DONE="$(ssh cat $RUN.done 2>/dev/null)"
done
if [ $DONE -eq 0 ]
then
    scp ...
else
    # Optionally fetch logfile
    # scp $RUN.log@remote ...
    echo "ERROR in remote matlab...."
fi
0 голосов
/ 15 июля 2011

Попробуйте установить ServerAliveInterval в вашем ssh_config файле. Таким образом, ваш сеанс SSH не закроется, пока не завершится удаленная команда.

См. здесь .

...