Я вхожу ssh
в сервер, и я запускаю скрипт Python, который займет ок. 24 часа до завершения. Что, если мое интернет-соединение умирает посередине? Это остановит команду?
Есть ли способ выполнить мою длительную команду так, чтобы локальные разъединения не повлияли на нее, и я мог бы продолжать видеть ее вывод после того, как ssh
снова войду в систему ?
screen -r
вы снова подключитесь.Вы также можете использовать,
disown
если вы уже начали процесс безscreen
илиnohup
источник
Существующие ответы могут хорошо работать, но мне нужно что-то для BusyBox (оболочка и набор инструментов для минимального оборудования, такого как домашние маршрутизаторы). Моя система не имеет
screen
,dtach
,at
,disown
, или дажеnohup
! Так что благодаря tbc0 на SO ( ссылка ) я нашел этот драгоценный камень. Он немедленно возвращается, но процесс сервера продолжает выполняться:Или, если требуется несколько команд:
Объяснение:
>&-
- закрыть ручку стандартного выхода2>&-
- закрыть stderr<&-
- закрыть стандартный&
- поставить процесс в фоновом режимеЭто не использует никаких внешних программ и должно работать через ksh, ash, оболочку Bourne, bash и т. Д.
источник
Если вы справитесь с процессом и закроете сеанс, процесс будет принят init (PID 1).
Если у меня есть сессия и я делаю:
и откройте другой сеанс и запустите:
Мой процесс все еще выполняется, и мы видим, что его родительский процесс теперь равен 1 (init).
В качестве альтернативы вы можете настроить свой скрипт, как если бы вы были демоном. Быстрый поиск обнаруживает эту, казалось бы, полезную ссылку: http://onlamp.com/python/pythoncook2/solution.csp?day=1 . Если вы хотели принять такой подход.
источник