Ожидание между запуском фоновых процессов в bash - PullRequest
0 голосов
/ 24 января 2020

У меня есть главный сценарий, который запланирован с помощью задания cron. Главный сценарий должен будет вызывать два дочерних сценария параллельно, но с временем ожидания (скажем, 2 минуты)

ниже показано, как мастер похоже. Как добавить время ожидания между дочерним элементом 1 и дочерним 2, чтобы дочерний элемент 2 запускался через 1 минуту, хотя сценарий дочернего элемента 1 еще не завершен. Прямо сейчас я добавляю желаемое время ожидания в child 2 как обходной путь, но есть несколько таких мастеров, которые будут запускать оба childs с разным временем ожидания, поэтому его утомительно каждый раз редактировать child 2.

#!bin/bash
echo "start both the script"
sh child1.sh  & sh child2.sh
echo "child 1 & child 2 finished"
sh child3.sh
echo "child 3 finished"

то, что я пробовал до сих пор, но, к сожалению, это ждет ребенка от 1 до финала sh, затем спит 2 минуты и запускает ребенка 2. Есть предложения?

 #!bin/bash
    echo "start both the script"
    sh child1.sh  && sleep 2m && sh child2.sh
    echo "child 1 & child 2 finished"
    sh child3.sh
    echo "child 3 finished"

1 Ответ

1 голос
/ 24 января 2020

Команда запускается в фоновом режиме, если & - вместо ;, && или символ новой строки - используется в качестве разделителя команд, который следует за ней.

Таким образом, вы можете начать свой первый фоновый процесс с & после него, а затем последующим сном с ;, && или новой строкой:

#!/bin/bash
echo "Start child1 in the background and child2 in the foreground after a 2m delay" >&2
./child1 & child1_pid=$!
sleep 2m  # note that "2m" is an extension; sleep 120 will work on more systems
./child2; child2_retval=$?

echo "Child2 exited with status $child2_retval"
wait "$child1_pid"; child1_retval=$?
echo "Child1 exited with status $child1_retval"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...