допустим, у меня действительно-длинный- really-long-running.sh ("очень длинный", как в "часах").

Я хотел бы, чтобы удаленная машина выполняла его (а затем выключала локальную машину).

К сожалению, у меня нет большого опыта работы с ssh. Это делает то, что я хочу, или просто маскирует соединение?

ssh user@host "bash -s " < really-long-running.sh &

ОБНОВИТЬ

Это не так.

Как тогда я могу это сделать?

4 ответа4

2

Существует также инструмент nohup . От man nohup:

nohup - запустить команду, защищенную от зависаний, с выводом не-tty

Вы можете работать шаг за шагом:

  • ssh к удаленному хосту
  • nohup /path/to/really-long-running.sh > /path/to/where-to-store-the-output &
  • может отключиться сейчас;

или сразу с вашей локальной машины:

ssh remote-host 'nohup /path/to/really-long-running.sh > /path/to/where-to-store-the-output &'

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

1

Вы можете использовать at удаленной машине, чтобы запланировать свою работу.

$ ssh remote-host
$ at now + 5 min
at> really-long-running.sh
at> <Ctrl-D>
job 1 at 2016-10-12 09:10
$ exit

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

1

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

1

Это 'может' делать то, что вы хотите (потом снова войти в ssh и проверить с помощью top?)

Тем не менее, идеальные способы сделать это - запустить команду в сеансе экрана (или tmux), который затем позволяет вам отключиться от этого запущенного сеанса, в то же время просматривая, что он делает.

Или вы можете войти через ssh, а затем «отключить» процесс от текущего терминала, установив фоновый режим, а затем отключив его, используя

ctrl + z
bg
disown

Или вы можете фоновый процесс из командной строки, добавив & к вашей команде. Вам все равно нужно будет отречься от него, чтобы он не умирал при отключении.

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