Как отправить работу SSH в фоновом режиме - PullRequest
8 голосов
/ 18 ноября 2011

Я вошел на удаленный сервер через ssh и запустил скрипт php.По-видимому, это займет 17 часов, есть ли способ разорвать соединение, но сохранить выполнение скрипта?Я не сделал никакого перенаправления вывода, поэтому я вижу все выходные данные.

Ответы [ 4 ]

8 голосов
/ 18 ноября 2011
ctrl + z 

приостановит его.Затем введите

bg

, чтобы отправить его в фоновый режим.Запишите PID процесса для последующего использования;)

РЕДАКТИРОВАТЬ: я забыл, вы должны выполнить

disown -$PID

, где $ PID - это pid вашего процесса

после этого процесс не будет остановлен после закрытия терминала.

8 голосов
/ 18 ноября 2011

Можете ли вы остановить процесс прямо сейчас?Если это так, запустите screen , запустите процесс и отсоедините экран, используя ctrl-a, затем ctrl-d.Используйте screen -r для получения сеанса позже.

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

1 голос
/ 23 августа 2013

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

  1. продолжение защищает команду 'screen'. ваше соединение разорвется, но экран защитит псевдотерминал, вы можете подключиться к нему позже, см. man.
  2. если вам не нужно взаимодействие операторов со сценарием, вы можете просто поместить сценарий в фоновый режим в начале и записать полный вывод в файл журнала. Просто используйте команду:

    nohup /where/is/your.script.php >output.log 2&>1 &
    

    > output.log перенаправит вывод в файл журнала, 2 &> 1 добавит поток ошибок в вывод, эффективно в файл журнала. last & переведет команду в фоновый режим. Обратите внимание, что команда nohup отсоединит процесс от группы терминалов.

    Теперь вы можете безопасно выйти из оболочки ssh. Поскольку ваш скрипт находится вне группы терминалов, он не будет уничтожен. Он будет присоединен к вашему процессу оболочки, в системный процесс INIT. Это Unix, как поведение системы. Полный вывод вы можете контролировать с помощью команды

    tail -f output.log   #allways breakable by ^C, it is only watching
    

    При использовании этого метода вам не нужно использовать уловки оболочки ^ Z, bg и т. Д. Для помещения команды в фоновый режим.

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

0 голосов
/ 18 ноября 2011

Вы можете использовать screen.

...