Выполнение фоновых задач

Бывает, что нужно выполнить какую-то длительную операцию без собственного участия. При этом с планировщиком часто играться не охота, хочется просто начать дело и пойти куда нибудь. В принципе с этим проблем нет, можно просто оставить комп и пойти себе. Но гораздо интереснее дело обстоит, когда у нас есть сервер, доступ к которому у нас по ssh. Тогда наша длительная задача занимает сразу два компа, а это порой нежелательно. Хочеться избежать чьего-то вмешательства в процесс плюс избежать неожиданностей при перезагрузке клиентской машины. Ведь при разрыве соединения по ssh сам процесс тоже может прекритить работу, обосновуя это тем, что завершился терминал с которого этот процесс запустили. Но способ есть, как этого избежать. Рассмотрим на примере: нужно скачать исходники ядра Linux с kernel.org, а инет медленный и качать будет долго.

Для решения задачи применяем старый добрый wget. Разница лишь в том, как запускать процесс. А запускать будем так:

$ nohup wget "http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.32.tar.xz" > wget.log 2>&1 &

Скачивание как обычно начинается в текущую папку. Новым здесь есть наличие nohup, которое позволяет не придираться к тому факту запущен ли терминал или нет. Вывод самого wget мы направили в wget.log, чтобы можно было оперативно мониторить прогресс, поскольку так он никуда выводиться не будет. Мониторить можно хотябы так:

$ tail -f wget.log

В терминале мы увидим как wget проводит скачивание. Ошибки от wget мы направляем в тот же файл. Амперсанад в конце строки автоматом отбрасывает задачу в фон по началу выполнения. Естессвенно по завершения скачивания процесс завершится сам.

Кстати выгодно применять этот приём для скачивания в папку, которая видна через Web-сервер. Если лог писать рядом, то можно следить за прогрессом просто из браузера. Очень полезно при скачивании больших файлов. Если нужно ещё как-то разнообразить процесс скачивания, то можно добавить wget'у нужные аргументы, nohup в этом не ограничивает.

Точно так же можно запускать любой другой процесс и спокойно отключаться и идти что-то другое делать. Главное - позаботиться о наличии способа следить за выполением, если нужно ибо после отключения обычным способом это уже не сделать.