Архив метки: disown

Команды disown и nohup в Linux. Продолжение выполнения заданий после выхода из системы.

Задача: работая локально в терминале или удалённо по ssh, запустить на выполнение какую-либо команду, чтобы та не перестала выполняться после разлогинивания (получения SIGHUP). Безумно полезно в работе по ssh при ненадёжном интернет-соединении.

Есть 2 ситуации: 1. команда уже запущена, а мысль о том, что её выполнение нужно оставить на попечение системы, отвязав от текущей сессии, пришла после; 2. команда ещё не запущена и мы хотим сделать её самостоятельной заранее.

1. Если команда уже запущена, то нажимаем CTRL+Z, тем самым остановив её выполнение:

apt-get update && apt-get upgrade -y
В кэше http://archive.ubuntu.com raring Release.gpg
В кэше http://security.ubuntu.com raring-security Release.gpg                                                                                            
В кэше http://archive.canonical.com raring Release.gpg                                                                                                   
Получено:1 http://archive.ubuntu.com raring-updates Release.gpg [933 B]                                                                                  
26% [Ожидание заголовков] [2 Release 9 731 B/40,8 kB 24%] [Ожидание заголовков] [Ожидание заголовко�^Z
[1]+  Остановлено  apt-get update

 Затем, переводим её выполнение в фоновый режим командой bg и отвязываем от текущей сессии (удаляем из активных заданий) командой disown:

bg && disown

 Теперь, можно нажимать CTRL+D, не опасаясь что обновление системы оборвётся при разлогинивании.

2.Более разумное решение — воспользоваться командой nohup, которая сразу сделает выполняемую задачу устойчивой к SIGHUP и по умолчанию сохранит выход stdout в файл nohup.out в текущей директории, что удобно, чтобы позднее проверить выполнилась ли данная задача или нет. Вывод, так-же может быть перенаправлен в произвольный файл стандартными средствами — знаком > после команды. Примеры:

nohup ping -c 1000 ya.ru &

nohup ping -c 1000 ya.ru > ping_`date +%d.%m.%y_%H.%M` &

 В первом примере команда ping посылает 1000 запросов сайту ya.ru и записывает результаты в файл nohup.out в текущей директории.
Во втором примере  команда ping посылает 1000 запросов сайту ya.ru и записывает результаты в файл, содержащий слово ping и текущие дату и время, находящийся в текущей директории.

Автор: Yar4e