Выполнение продолжительной команды на ssh

Право Вы можете использовать lsb_release-a или можете быть:


cat /etc/issue; uname -a
10
задан 19 August 2010 в 22:38
4 ответа

Лучший способ состоит в том, чтобы использовать screen (на сервере) для запуска сессии, чтобы выполнить команду в и затем разъединить экран, таким образом, это будет продолжать бежать, и можно сделать другие вещи или просто разъединиться с сервера. Другая опция состоит в том, чтобы использовать nohup в сочетании с & таким образом, Вы имели бы nohup <command> &

29
ответ дан 2 December 2019 в 21:58
  • 1
    Экран. Или можно установить задачу крона, если что-то Вы работаете больше затем однажды. –  xeon 19 August 2010 в 22:54
  • 2
    Если Вы разъединяетесь, в то время как это работает на экране, screen -r воссоединит Вас. –  dpflug 20 August 2010 в 00:41

Можно также использовать disown если Вы уже запустили процесс без screen или nohup

2
ответ дан 2 December 2019 в 21:58

Если Вы фон, процесс и закрыл Ваш сеанс процесс, будете приняты init (PID 1).

Если я имею сессию и делаю:

]$ sleep 10000 &
]$ exit

и откройте другую сессию и работайте:

]$ ps -ef | grep sleep
501      26387     1  0 16:37 ?        00:00:00 sleep 10000
root     26422 21360  0 16:40 pts/0    00:00:00 grep sleep

Мой процесс все еще работает, и мы видим, что его родительский процесс теперь 1 (init).

Кроме того, Вы могли настроить свой сценарий как Вы, будет демон. Быстрый поиск поднимает эту на вид полезную ссылку: http://onlamp.com/python/pythoncook2/solution.csp?day=1. Если Вы хотели проявить тот подход.

1
ответ дан 2 December 2019 в 21:58

Существующие ответы могут работать хорошо, но мне нужно что-то для BusyBox (оболочка и набор инструментов для минимального оборудования, такого как домашние маршрутизаторы). В моей системе нет screen , dtach , at , disown или даже nohup ! Итак, благодаря tbc0 на SO ( ссылка ), я нашел этот драгоценный камень. Он немедленно возвращается, но процесс сервера продолжает работать:

ssh myserver 'sleep 100 >&- 2>&- <&- &'

Или, если требуется несколько команд:

ssh myserver '(echo one; sleep 100; echo two; sleep 200) >&- 2>&- <&- &'

Пояснение:

  • > & - - закрыть дескриптор стандартного вывода
  • 2> & - - закрыть stderr
  • <& - - закрыть stdin
  • & - поместить процесс в фоновый режим

При этом не используются внешние программы и он должен работать с ksh, ash, оболочкой Bourne, bash и т. д.

1
ответ дан 2 December 2019 в 21:58

Теги

Похожие вопросы