Linux: как поставить в очередь некоторые задания в фоновом режиме? - PullRequest
9 голосов
/ 04 января 2011

Вот функция, которую я ищу (и не совсем нашла):

У меня есть x процессов, которые я хочу запускать последовательно.Некоторые из них могут занимать довольно много времени.

Я хочу, чтобы эти процессы выполнялись в фоновом режиме моей оболочки.

Я знаю о nohup, но, похоже, он не работает идеально ...assuming job1 - трудоемкое задание, если я нажму ctrl + c из пустой строки, которую получаю после выполнения nohup job1 && job2 && job3 &, то job2 и job3 не будут работать, а job1 может или не может работать в зависимости откак долго я запускаю nohup.

Есть ли способ получить нужную мне функциональность?Я ssh'ed на сервер Linux.Что касается бонусных баллов, я бы хотел, чтобы задания, которые я поставил в очередь, продолжали выполняться, даже если я закрыл свое соединение.

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: Небольшое дополнение квопрос: если у меня есть скрипт оболочки с тремя операторами exec

exec BIGTHING exec smallthing exec smallthing

будет ли он определенно последовательным?И есть ли способ обернуть их все в одну строку exec, чтобы получить эквивалентную функциональность?

т.е. exec BIGTHING & smallthing & smallthing или && или somesuch

Ответы [ 7 ]

11 голосов
/ 04 января 2011

Использование screen.

  1. ssh к серверу
  2. пробег screen
  3. запустите ваши программы: job1;job2;job3 - разделенные точкой с запятой, они будут выполняться последовательно
  4. Отсоединение от экрана: CTRL-A, D
  5. выход с сервера
* * Тысяча двадцать-одина (позже) * * 1 022
  1. ssh на сервер
  2. пробег screen -r
  3. и вы находитесь в своей оболочке с запущенной очередью заданий ...
7 голосов
/ 07 января 2013

В качестве альтернативы, если вы хотите немного больше контролировать свою очередь, например, возможность перечислять и изменять записи, проверьте Task Spooler.Он доступен в репозиториях Ubuntu 12.10 Universe в виде пакета task-spooler.

2 голосов
/ 08 февраля 2012

Я согласен, что screen очень удобный инструмент.Существует дополнительный инструмент командной строки enqueue - который позволяет ставить в очередь дополнительные задания по мере необходимости, т.е. даже если вы уже запустили одно из заданий, вы можете добавить другое, когда первое уже запущено.

Вот образец из enqueue README:

$ enqueue add mv /disk1/file1 /disk2/file1
$ enqueue add mv /disk1/file2 /disk2/file2
$ enqueue add beep
$ enqueue list
1 голос
/ 06 мая 2014

немного больше информации:

Если вы разделяете свои задания с помощью &&, это эквивалентно оператору && / and в языке программирования, например в операторе if.Если задание 1 возвращается с ошибкой, задание 2 не запускается и т. Д. Это называется «короткое замыкание».Если вы разделяете работу с;вместо этого все они будут работать независимо от кода возврата.

Если вы закончите строку с &, это будет фоном всего.Если вы забудете, вы можете нажать control + z, чтобы приостановить выполнение команды и дать вам приглашение, тогда команда "bg" будет их фоновой.они прикреплены к вашей оболочке (по крайней мере, в большинстве реализаций bash).Если вы хотите, чтобы оно продолжалось после выхода из системы, используйте команду «disown».

0 голосов
/ 04 января 2011

Чтобы фон оторвал его от оболочки (задачи, которые были заданы только &, являются предметом игр оболочки), используйте

setsid foo

0 голосов
/ 04 января 2011

Базовый механизм для фонового задания из оболочки:

job1 &

Так что вы могли бы сделать простой сценарий оболочки, который делает это последовательно для нескольких из них, хотя в этот момент я бы подумал о погружении внекоторый язык сценариев, такой как Perl или Python, и написание простого сценария для разветвления этих процессов.Если ваш сценарий разветвляется как первый шаг и выполняет всю свою работу в форке, он немедленно вернет вам управление в оболочке и продолжит работу, даже если вы выйдете из системы.

0 голосов
/ 04 января 2011

после вашей команды введите &

для примера запуска исполняемого файла с именем foo:

./foo &

, и он также продолжит работать, даже если вы закроете соединение ssh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...