Как запустить несколько сценариев nohup одновременно?

Я работаю над оптимизацией своего рабочего процесса, и мне было интересно, сталкивался ли кто-нибудь с такой же проблемой, как у меня. Я изо всех сил пытался понять, как запустить несколько сценариев оболочки «nohup» одновременно. Например, у меня есть несколько скриптов, которые выглядят так:

start.sh

rm nohup.out
nohup python -u script.py args

Я пробовал запускать их с помощью такого скрипта:

start_option_1.sh

process_directory_1/start.sh & process_directory_2/start.sh ... (3-5 more of these)

А вот так:

start_option_2.sh

process_directory_1/start.sh && process_directory_2/start.sh ... (3-5 more of these)

но без кубиков... скрипты даже не запускаются. Будем очень признательны за любые идеи/помощь!! Использование python3.6, если это тоже важно (но похоже, что это скорее проблема nohup).


person Colin Fausnaught    schedule 16.11.2019    source источник
comment
nohup на самом деле не делает много/ничего полезного; нет веских причин использовать его, если вы действительно используете bash и имеете команду disown. python -u script.py args </dev/null >scriptOne.log 2>&1 & scriptOne_pid=$! && disown -h "$scriptOne_pid" делает все, что делает nohup, вообще не требуя никаких внешних команд.   -  person Charles Duffy    schedule 17.11.2019
comment
Понятно, я буду иметь это в виду для будущих проектов. Клиент для этого проекта по какой-то причине требует nohup, поэтому у меня были проблемы. Спасибо!   -  person Colin Fausnaught    schedule 21.11.2019


Ответы (1)


Существует большая разница между использованием «&» и использованием «&&». Первый запустит каждый из сценариев в фоновом режиме. Второй будет выполнять их последовательно, пока каждый скрипт не вернет успех («выход 0» или аналогичный).

Судя по контексту start.sh, вам нужен первый вариант (запустить все сценарии вместе). Каждый скрипт выполняет программу Python «script.py». В сообщении не указано, есть ли один скрипт в исходном рабочем каталоге или есть несколько «script.py», по одному в каждой папке. Наверное второй вариант.

В этом случае вы хотите запускать свои скрипты из папки process_directory_*. Рассмотрите возможность внесения изменений в:

( cd process_directory_1 && exec ./start.sh) &
( cd process_directory_2 && exec ./start.sh) &
...

Примечания:

  1. Все скрипты запускаются одновременно.
  2. Каждый скрипт выполняется в отдельной папке, чтобы получить доступ к script.py в этой папке.
  3. Каждое задание будет оставлять журнал в папке запуска «nohup.log».
person dash-o    schedule 16.11.2019
comment
Лучше использовать cd ... && ... (вместо того, чтобы разделять эти команды точкой с запятой), чтобы команда справа не выполнялась в неправильном каталоге в случае сбоя cd. И рассмотрите возможность использования exec для использования подоболочки, подавляя вилку для последней команды в ней. - person Charles Duffy; 17.11.2019
comment
Большое спасибо вам обоим, это отлично сработало и значительно облегчило выполнение моих сценариев! Я последовал рекомендации @CharlesDuffy и в итоге получил: ( cd process_directory_1 && ./start.sh) & ( cd process_directory_2 && ./start.sh) & ... для всех, кто может столкнуться с этой проблемой с nohup! - person Colin Fausnaught; 17.11.2019
comment
@CharlesDuffy интегрирует предложения в решение - person dash-o; 17.11.2019