У меня есть задача, которую нужно выполнить в моем графике проекта (3 недели).
Я могу настроить cron, чтобы делать это каждую неделю или (например) на 3-й неделе каждого месяца - но не могу найти способ делать это каждые три недели.
Я мог взломать сценарий для создания временных файлов (или аналогичных), чтобы он мог сработать, это был третий раз, когда он был запущен - но это решение пахнет.
Можно ли это сделать чистым способом?
Ответы:
Файл crontab позволяет только указать:
Поэтому невозможно указать, какие недели должны применяться.
Написание сценария оболочки может быть лучшим вариантом.
Вы можете получить номер недели в shell-скрипте, используя
или
в зависимости от того, хотите ли вы, чтобы ваши недели начинались в воскресенье или в понедельник.
Так что вы могли бы использовать
И $ check будет 0 в 1, 4, 7, ... неделях года.
источник
Благодаря более ранним ответам были указаны параметры эпохи для даты -e или форматирования как% s
Хотя немного больно
((date +%s) / 86400)
дает дни из эпохи.Опираясь на еженедельное выполнение задания в одно и то же время, легко проверить это по определенному дню в 3 недели (
$epoch_day%21 == 13
например)В моем случае это нормально, так как это одноразовая задача. Если он пропущен в определенный день, то нет необходимости использовать следующую возможность.
источник
Если вы можете сохранить файл метки времени между запусками, вы можете проверить его дату, а не полагаться только на текущую дату.
Если ваша команда find поддерживает дробные значения для
-mtime
(или имеет-mmin
) ( GNU find имеет оба , POSIX, похоже, не требует и того и другого ), вы можете «задушить» задания cron с помощью find и touch .Или, если у вас есть команда stat, которая поддерживает отображение дат файлов как «секунд с начала эпохи» (например, stat из Gnu coreutils , а также других реализаций), вы можете сделать свое собственное сравнение, используя date , stat и операторы сравнения оболочки (вдоль с прикосновением, чтобы обновить файл метки времени). Вы также можете использовать ls вместо stat, если он может выполнять форматирование (например, ls из GNU fileutils ).
Ниже приведена программа на Perl (я ее так назвал
n-hours-ago
), которая обновляет файл отметки времени и успешно завершает свою работу, если исходная отметка времени была достаточно старой. Текст его использования показывает, как использовать его в записи crontab, чтобы ограничить работу cron. В нем также описываются корректировки для «летнего времени» и как обрабатывать «поздние» временные метки из предыдущих запусков.источник