Как запустить скрипт через SSH, который не заканчивается, когда я закрываю соединение?


18

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

Есть ли способ запустить скрипт, который не зависит от оболочки, которая его запустила?

Я использую Ubuntu 9.04.

Ответы:


24

Вы можете запустить команду с командой nohup перед ней. Вы также можете запустить его в «экране», что позволит вам снова подключить терминал.

Например:

ssh mySever 'nohup bash myscript.sh'

Или просто введите ssh и выполните команду nohup. Он должен продолжать работать даже при отключении. Это потому, что nohup перехватит сингл SIGHUP (зависание).

Экран немного сложнее, но за 20 минут, которые вам могут понадобиться для изучения основ, это один из самых полезных инструментов. Вот учебник .


Отрезанный Кайлом ...> улыбка <
Эван Андерсон

+1 любому, кто стреляет из снайпера Эвану. Happy 10K :)
squillman

1
ссылка на учебник не работает :(
Идо Ран

7

Я всегда просто использую nohup. Если я забочусь о выводе, я перенаправляю его в файл журнала, в противном случае я отправляю его в / dev / null.

Пример:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Это помещает его в фоновый режим с выводом в / dev / null, и он не защищен от сигнала HUP, если вы выйдете из системы. Вы также можете «отказаться» от задания с помощью определенных оболочек (например, bash), чтобы оно не было связано с вашим сеансом.

disown %1

1
+1 для откреститься - очень полезно , если вы забыли запустить с помощью поЬира
Mark

5

Чтобы установить экран: apt-get install screen

Затем запустите, используя просто: screen

И man screenчтобы получить ключ привязки.


+1! экран да вещь!
Хавьер

Я использовал экран, но по разным причинам перешел на tmux. Google "tmux против экрана", и вы найдете несколько ссылок, как это: superuser.com/questions/236158/tmux-vs-screen
m0j0

2

Пока вы вошли на сервер, вы можете запустить скрипт в отдельном режиме с помощью следующей команды:

nohup script >script.out 2>script.err &

Позже, когда вы снова войдете в систему, вы можете проверить script.out для любого вывода и script.err для любых сообщений об ошибках. Если вы хотите вывод и сообщения об ошибках в одном файле, то выполните:

nohup script >script.out 2>&1 &
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.