Запустите команду в оболочке и продолжайте выполнять команду при закрытии сеанса - PullRequest
34 голосов
/ 10 января 2009

Я использую Putty для подключения к удаленному серверу. Я хочу знать, есть ли способ написать мои команды и позволить им продолжать работать после того, как я закрою сеанс с Putty. Причина этого в том, что я не хочу постоянно включать компьютер. Есть ли способ сделать это?.

Обновление с решением

Для моего вопроса, как он представлен, лучшим решением является использование одной из предоставленных команд, например nohup , поскольку вам не нужно устанавливать какое-либо дополнительное программное обеспечение. Но если вы столкнулись с той же проблемой, используйте экран, установите его и используйте. Это удивительно.

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

Ответы [ 9 ]

84 голосов
/ 10 января 2009

экран! Это лучшее, что есть нарезанный хлеб. (Да, я знаю, что другие уже предложили это, но это так хорошо, что весь мир должен присоединиться и предложить это тоже.)

Экран

похож на ... мммм ... как на VNC и т. П. Для подключения к графическому интерфейсу, но для окон командной оболочки. Вы можете открыть несколько окон оболочки одновременно в одном сеансе экрана. Вы можете делать такие вещи, как:

  1. Начните сессию экранов, используя "screen -dR" (привыкните к использованию -dR)
    • запустить несколько команд в одном окне
    • нажмите CTRL - A , C , чтобы создать новое окно, откройте файл в vim
    • нажмите CTRL - A , 0 , чтобы вернуться к первому окну и ввести команду для файла, который вы только что отредактировали
    • CTRL - A , 1 , чтобы вернуться к вашей сессии vim
    • CTRL - A , C для еще одного окна и, возможно, сделать "sudo-su" (потому что вам просто нужна полная корневая оболочка)
    • CTRL - A , 0 и запуск фонового процесса
    • CTRL - A , C , чтобы создать еще одно окно, "tail -f" журнал для этого фонового процесса
    • CTRL - A , d для отключения экрана, затем CTRL - D для отключения от сервер
    • В отпуск на три недели
    • Войдите на сервер еще раз и введите «screen -dR», чтобы подключиться к существующему сеансу экрана
    • проверьте журнал в четвертом окне с помощью CTRL - A , 3 (как будто вы там все время смотрите его)
    • CTRL - A , 1 , чтобы снова взять этот сеанс vim
    • Полагаю, ты сейчас начинаешь понимать? =)

Это похоже на магию. Я использую экран дольше, чем помню, и все еще поражаюсь, насколько он чертовски хорош.

EDIT : Хочу только упомянуть, что теперь есть также tmux . Очень похоже на screen , но имеет некоторые уникальные особенности, разделяя окна, являясь наиболее заметным.

28 голосов
/ 10 января 2009

nohup, disown и screen - все хорошо, но screen лучше, потому что, в отличие от двух других, screen позволяет вам отключиться от удаленного сервера, сохранить все в рабочем состоянии, а затем снова подключиться позже, чтобы увидеть, что происходит. С nohup и disown вы не можете возобновить взаимодействие.

10 голосов
/ 10 января 2009

Попробуйте использовать Экран GNU . Это позволяет вам иметь несколько открытых оболочек одновременно. И вы можете отключиться от этих запущенных оболочек (т.е. закрыть сеанс с Putty), и они будут продолжать делать свое дело.

9 голосов
/ 10 января 2009

То, что вы ищете, это nohup .

См. Ссылку на вики, чтобы узнать, как ее использовать.

5 голосов
/ 11 января 2009

экран лучший.

Попытка:

screen -dmS "MyTail" tail -f / var / log / syslog

Эта команда запуска в фоновом режиме.

Используйте screen -r для отображения списка или или screen -r Mytail для входа в сеанс.

Если больше пользователей нуждается в доступе к одному сеансу, используйте: screen -rx MyTail, и оба или более пользователей совместно используют сеанс.

4 голосов
/ 10 января 2009

Если вы не можете использовать screen (поскольку, например, ваш сеанс SSH управляется программно), вы также можете использовать daemonize для запуска программы в качестве демона.

3 голосов
/ 13 ноября 2009

Один способ, который мне подходит, это at.

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

например:

$ at 23:55
at> wget http://file.to.download.com/bigfile.iso
at> ^D  

Вы передаете at время (в будущем), и оно дает вам подсказку. Вы вводите команды, которые хотите запустить в это время, и нажимаете Ctrl + D. Вы можете выйти из сеанса, и он будет запускать команды в указанное время.

Википедия имеет больше информации о at.

1 голос
/ 10 января 2009
./command & disown
0 голосов
/ 10 октября 2014
ssh localhost && ./command && exit
...