Запустите script после завершения другого (уже запущенного) завершения

Итак, у меня есть процесс, и для завершения потребуется несколько часов. Я хотел бы начать другой процесс сразу после того, как он закончится автоматически. Обратите внимание, что я не могу добавить вызов ко второму script в первый, не создавая другого, который последовательно запускает оба. Есть ли способ сделать это в Linux?

Изменить: один параметр - опросить каждую минуту x с помощью pgrep и проверить, завершен ли процесс. Если это так, запустите другую. Тем не менее, мне это не нравится.

PS: Оба сценария bash, если это помогает.

Ответ 1

Опрос - это, вероятно, путь, но он не должен быть ужасным.

pid=$(ps -opid= -C your_script_name)
while [ -d /proc/$pid ] ; do
    sleep 1
done && ./your_other_script

Ответ 2

Учитывая PID первого процесса, цикл

while ps -p $PID; do sleep 1; done ; script2

должен сделать трюк. Это немного более стабильно, чем имена pgrep и процессов.

Ответ 3

Вы можете выполнить wait уже запущенный процесс с помощью встроенной команды bash wait. man bash.

wait [n...] Подождите каждого указанного процесса и верните его статус завершения. Каждый n может быть идентификатором процесса или спецификацией задания; если задана спецификация задания, все процессы в этом рабочем конвейере ждать кого-либо. Если n не задано, все активные в данный момент дочерние процессы ждут, а статус возврата равен нулю. Если n указывает несуществующий процесс или задание, статус возврата - 127. В противном случае Статус возврата - это статус выхода последнего процесса или задание для.

Ответ 4

Возможно, вы можете сначала нажать ctrl + z и ввести

fg;"your second job"

Ответ 5

Часто бывает, что в вашей программе несколько демонов. В этом случае ваш pid будет массивом. Просто используйте:

PID = ($ (pidof -x имя_процесса)) # это сохраняет все PID данного процесса в массиве $pid

Теперь просто измените титонный код как:

while ps -p ${PID[*]}; do sleep 1; done ; script2

Ответ 6

У меня была аналогичная проблема и она была решена так:

nohup bash script1.sh &

ожидание

nohup bash script2.sh &

Ответ 7

Самый простой способ:

./script1.sh && ./script2.sh

& говорит, что ждать успешного завершения скрипта1 перед тем, как перейти к сценарию2.