Чтобы запустить процесс в фоновом режиме, используйте &
в качестве завершающего символа команды. Используйте >
, чтобы перенаправить стандартный вывод процесса в файл. Для справки вы можете увидеть bash manual Список команд или bash manual redirections , но многие ресурсы доступны онлайн.
Таким образом, сценарий просто станет:
call_runner_date_range() {
start=$1
end=$2
start=$(date -d $start +%Y%m%d)
end=$(date -d $end +%Y%m%d)
while [[ $start -le $end ]]
do
start=$(date -d"$start + 1 day" +"%Y%m%d")
formatted_date=$(date -d $start +%m-%d-%Y)
python -m my_python_script --analysis-date=$formatted_date > log_$start.log &
done
}
call_runner_date_range '2016-12-31' '2019-08-15'
Вы можете использовать встроенную оболочку wait
для ожидания всех в настоящее время все еще работающих фоновых процессов в текущей оболочке bash. Или вы можете сохранить каждый PID идентификатора фонового процесса, используя $!
и указать список пидов, которых вы хотите ждать.
childs=() # bash array, initializing to empty
# then later:
python -m my_python_script --analysis-date=$formatted_date > log_$start.log &
childs+=($!) # append the background jobs pids name to bash array
# then later
wait "${childs[0]}" # wait for first background job in childs array
wait "${childs[@]}" # wait for all background jobs in childs array
Обратите внимание, что вас может заинтересовать использование xargs
который может (в большинстве реализаций) выполнять команды параллельно для каждой строки ввода или для GNU parallel
, который является просто инструментом оболочки для параллельного выполнения нескольких заданий.