Виконання тривалої команди на ssh


10

Я sshІНГ на сервер , і я починаю сценарій Python , який буде приймати ок. 24 години, щоб завершити. Що робити, якщо моє підключення до Інтернету вмирає посередині? Чи це зупинить команду?

Чи є спосіб запустити мою тривалу команду таким чином, що локальні відключення не впливатимуть на неї, і я можу продовжувати бачити її вихід після того, як sshзнову ввійду в систему ?

Відповіді:


29

Найкращим способом є використання screen(на сервері) для початку сеансу для запуску команди, а потім відключення екрану, щоб він продовжував працювати, а ви можете робити інші речі або просто відключитися від сервера. Інший варіант - використовувати nohupв поєднанні з &таким чином, як у васnohup <command> &


Екран. Або ви можете встановити cron завдання, якщо це щось, що ви запускаєте більше одного разу.
xeon

2
Якщо ви відключитесь під час роботи на екрані, screen -rпідключіть вас.
dpflug


2

Існуючі відповіді можуть добре працювати, але мені знадобилося щось для 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
  • <&- - близький стдин
  • & - покласти процес на задній план

При цьому не використовуються зовнішні програми, і вони повинні працювати через ksh, ash, Bourne shell, bash тощо.


1

Якщо ви закриєте процес і закриєте сеанс, процес буде прийнятий 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 . Якщо ви хотіли скористатися таким підходом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.