Ситуация такая: существует SHEll скрипт(назовем его А), который надо запускать каждые 30 секунд.
Но т.к. в кроне я не увидел возможности настроить интервал меньше минуты - пришлось запускать каждую минуту.
Но появилась проблема: время исполнения самого скрипта А иногда превышает интервал запуска, поэтому скрипт А не успевает доделать свою работу, что для меня не приемлемо.
Тогда я решил сделать так: скрипт А из крона убрать, но создать еще 1 скрипт Б, который будет запускаться с интервалом в минуту и проверять - если скрипт А все еще запущен, то ничеого не делать, а если скрипт А не запущен, то запускать его.В связи с этим несколько вопросов(все скрипты на SHEll):
1) Можно ли сделать так, чтобы скрипт висел в памяти вечно и повторял заданный цикл через определенный промежуток времени? Если да, то как и какие команды использовать?
2) Можно ли в кроне задать интервал в несколько секунд? Если да, то как?
3) Как сделать так, чтобы скрипт Б проверял закончил ли работу скрипт А? Какие команды, чтоб определить работет ли скрипт или уже нет?
>1) Можно ли сделать так, чтобы скрипт висел в памяти вечно и
>повторял заданный цикл через определенный промежуток времени? Если да, то как
>и какие команды использовать?Можно организовать цикл, используя пустой оператор ":" или "true":
while : ; # или while true;
do
. . . #
. . . # Тело цикла
. . . #
sleep 30 # Пауза
done>2) Можно ли в кроне задать интервал в несколько секунд? Если да,
>то как?Увы, это невозможно. минимальный квант времени для cron - минута.
>3) Как сделать так, чтобы скрипт Б проверял закончил ли работу скрипт
>А? Какие команды, чтоб определить работет ли скрипт или уже нет?
>Можно воспользоваться командой "ps", а лучше будет скомбинировать ее с
обработкой lock-файлов, которые бы создавал скрипт.
Спасибо. Цикл сделал.
Когда я запускаю его в фоновом режиме 'sh script.sh &' все работает - он висит в памяти бесконечно.
Но если я выхожу из терминала он перестает работать.
Как сделать та , чтобы скрипт не завершался при выходе из терминала?
>Спасибо. Цикл сделал.
>Когда я запускаю его в фоновом режиме 'sh script.sh &' все работает
>- он висит в памяти бесконечно.
>Но если я выхожу из терминала он перестает работать.
>Как сделать та , чтобы скрипт не завершался при выходе из терминала?
>Тут вам, однако, "man nohup" почитать надо будет.
>В связи с этим несколько вопросов(все скрипты на SHEll):
>1) Можно ли сделать так, чтобы скрипт висел в памяти вечно и
>повторял заданный цикл через определенный промежуток времени? Если да, то как
>и какие команды использовать?А поизучать скрипты, запускающие _все_ сервисы при запуске системы? Они обычно как раз на шеле...(1>)
+>Когда я запускаю его в фоновом режиме 'sh script.sh &' все работает - он висит в памяти бесконечно.
+>Но если я выхожу из терминала он перестает работать.http://www.opennet.me/openforum/vsluhforumID15/1862.html
>3) Как сделать так, чтобы скрипт Б проверял закончил ли работу скрипт
>А? Какие команды, чтоб определить работет ли скрипт или уже нет?http://www.opennet.me/openforum/vsluhforumID9/7156.html
Для тех же (>1) скриптов в /etc/init.d/ в дистрибутиве обычно есть какие-то утилиты создающие-проверяющие pid-файл или что-то подобное...
http://www.opennet.me/openforum/vsluhforumID3/39159.html#11
>Тогда я решил сделать так: скрипт А из крона убрать, но создать
>еще 1 скрипт Б, который будет запускаться с интервалом в минуту
>и проверять - если скрипт А все еще запущен, то ничеого
>не делать, а если скрипт А не запущен, то запускать его.А зачем Вам скрипт Б если не используете крон? Сделайте в скрипте А цикл, внутри которого и делайте полезную работу, а по завершении работы sleep на 30 секунд. Демонизируйте ваш скрипт.