LINUX.ORG.RU

Bash+flock. запуск ежесекундно программы, даже если она закрылась.


0

1

Нужен проверятор запущенности нужной программы.

Ничего умнее не придумал, как в таймере ежесекундно пытаться открыть программу заранее залочив дублирование.

Но вот проблема - после закрытыя работающей копии нужной программы, сам баш вылетает.

nohup - тут вообще не выход, потому как нуж смотреть в противоположную сторону.

Как прописать exec чтобы оно продолжало стараться открыть программу, несмотря на закрытие?

Сейчас все выглядит примерно так:

timer() {
while sleep 1; 
do exec flock -n /home/user/Документи/Prog.lock /home/user/Документи/prog.sh;
done
}
★★

Последнее исправление: abbat81 (всего исправлений: 1)

Эээ, прочитать help exec и убрать exec?

AITap ★★★★★
()

Хм

А почему падает программа?

cron?

ziemin ★★
()

Exec замешает процесс с шеллом приложением, так что некому следить.

Ты запускаешь прогу там же, где и проверку? Тогда ты можешь получить pid процесса и делать test -d /proc/$pid — если каталог есть, значит процесс ещё запущен.

quantum-troll ★★★★★
()
Ответ на: комментарий от outsider

Спасибо ))) каждые 2 секунды запускает )

abbat81 ★★
() автор топика

Нужен проверятор запущенности нужной программы.

if pgrep prog.sh > /dev/null
        then
            echo "prog.sh запущен"
        else
            echo "prog.sh не запущен"
fi
Allakka ★★★★
()

а так почему не подходит?

#!/bin/bash

delay () {
  let "us=1000000000-$(date +%N | sed 's/^0*//g')"
  sleep $(printf "0.%09i" $us)
}

while delay; do
  flock /home/user/Документи/prog.sh
done

anonymous
()

Но вот проблема - после закрытыя работающей копии нужной программы, сам баш вылетает.

это не bash вылетает, а сама программа. man exec, это _замещает_ программой старый bash. Убери exec, и возможно поставь & после команды(если хочешь продолжения работы bash)

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.