Перейти к содержимому
Калькуляторы

Некратный интервал в cron

3 минуты назад, myth сказал:

Просто запускать как сервис и все.

Да, так можно.

Этот сервис будет большую часть времени простаивать, но с периодичностью 1 раз в 19 минут "просыпаться" и выполнять какие-то действия.

Но ведь такой сервис уже есть — cron.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

10 часов назад, myth сказал:

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

Цикл со sleep по моему худший вариант из предложенных. Придется задачу запускать в бэкграунде для сохранения правильного интервала.

Лучший вариант для конкретно этой задачи был предложен Susanin , ниже пример кода на баше

#!/bin/bash

INTERVAL_MINUTES="19"

current_datetime=$(date "+%s")
interval_ok=$(( ($current_datetime / 60) % $INTERVAL_MINUTES ))

if [ "$interval_ok" = 0 ]
then
    echo "Start at $(date)" >> /tmp/cron-test.log
fi

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

16 часов назад, DDR сказал:

Цикл со sleep по моему худший вариант из предложенных. Придется задачу запускать в бэкграунде для сохранения правильного интервала.

Лучший вариант для конкретно этой задачи был предложен Susanin , ниже пример кода на баше


#!/bin/bash

INTERVAL_MINUTES="19"

current_datetime=$(date "+%s")
interval_ok=$(( ($current_datetime / 60) % $INTERVAL_MINUTES ))

if [ "$interval_ok" = 0 ]
then
    echo "Start at $(date)" >> /tmp/cron-test.log
fi

 

 

  Чем лучше ? Соблюсти правильный интервал, или узнать - завершилась ли задача взвисшая  вдруг, чтобы не плодить копий зависших процессов ? А уж чем чайлд завершился - тут сложно. В бэграунде - ну можно пид проверить, и что-то с процессом сделать, или прямо - ждать код завершения процесса, что при зависшем в бесконечном цикле будет печально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

11 минут назад, YuryD сказал:

  Чем лучше ? Соблюсти правильный интервал, или узнать - завершилась ли задача взвисшая  вдруг, чтобы не плодить копий зависших процессов ? А уж чем чайлд завершился - тут сложно. В бэграунде - ну можно пид проверить, и что-то с процессом сделать, или прямо - ждать код завершения процесса, что при зависшем в бесконечном цикле будет печально.

Можно и лочить скрипт, что-бы не было зависших процессов. Примеров в сети полно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

6 минут назад, vop сказал:

Можно и лочить скрипт, что-бы не было зависших процессов. Примеров в сети полно.

 В сети - на здоровье :) То, что у меня работает в древней FreeBSD и на голом шелле, как-то родилось без примеров из сети, из манов например, и книжки "программирование на shell".  Но - я старый маразматикдогматик, поэтому - каждый делает, как ему проще. Никому свою кочку зрения не навязываю, просто предложил. Просто ТС неполно изложил постановку задачи. Точно ли каждые 19 надо что-то делать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.