Подтвердить что ты не робот

Выражается ли выражение cron в unix/linux с указанием точных дат начала и окончания

Я хочу настроить что-то вроде этого.

  • Я хочу запускать работу "X" в 7 часов утра, начиная с 29 июня /2009 года по 30/12/2009. Рассматривайте текущую дату как 4/4/2009.
4b9b3361

Ответ 1

Это можно сделать сложным способом.

Вам нужно три отдельных задания cron для этого диапазона, все они запускают один и тот же код (X в этом случае):

  • один для 29 и 30 июня ("0 7 29,30 6 * X").
  • один за каждый день в месяцах с июля по ноябрь ("0 7 * 7-11 * X").
  • один для всех, кроме последнего дня декабря ("0 7 1-30 12 * X").

Это дает вам:

# Min   Hr   DayOfMonth   Month   DayOfWeek   Command
# ---   --   ----------   -----   ---------   -------
   0     7      29,30        6        *          X
   0     7          *     7-11        *          X
   0     7       1-30       12        *          X

Затем убедитесь, что вы прокомментируете их до 29 июня 2010 года. Вы можете добавить окончательное задание cron 31 декабря, чтобы отправить вам электронное сообщение о том, что его необходимо отключить.

Или вы можете изменить X, чтобы немедленно выйти, если год не 2009.

if [[ "$(date +%Y)" != "2009" ]] ; then
    exit
fi

Тогда не будет никакого значения, если вы забудете отключить задания.

Ответ 2

Да, в основном. Некоторые реализации cron имеют поддержку в течение многих лет, некоторые - нет, поэтому мы не будем считать, что у вас нет. Кроме того, я исхожу из предположения, что это задание выполняется только демонами cron, поэтому мы можем использовать бит выполнения, чтобы определить, должен ли cron выполнять задание.

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

Следующие выражения cron будут делать то, что вы хотите (каждый день, включая выходные). Подстройте, как вам нужно:

# Make the job executable on 29 June.
0 6 29 6 * chmod +x /path/to/my/job/script

# Run the job between June and December, only if it executable.
0 7 * 6-12 * test -x /path/to/my/job/script && /path/to/my/job/script

# Disable execution after 30 December.
0 8 30 12 * chmod -x /path/to/my/job/script

Ответ 3

Я обычно поклонник сохранения логики с запущенной программой. Вы можете подумать о настройке одного задания cron, которое запускает script каждый день, а затем script самостоятельно решить, нужно ли делать что-либо полезное. Когда последний полезный день (30 декабря) прошел, ваш script может удалить себя из crontab. В script вы можете настроить логику со всеми комментариями, необходимыми для описания того, что вы делаете и почему.

Если ваше задание является двоичной программой, вы можете настроить run_script, который выполняет эту фильтрацию расписания, прежде чем вызывать программу.

Ответ 4

Вы можете использовать это для создания crontab, который выполняется через определенные промежутки времени:

http://www.robertplank.com/cron/

Или это

http://www.webmaster-toolkit.com/cron-generator.shtml

Одним из решений было бы установить 6 кронов, 1 за каждый месяц, каждый из которых будет работать в 7 утра каждый день в этом месяце.

Это, наверное, самый простой способ, следующий - script.

Ответ 5

Нет, афайк, ты не можешь этого сделать.

В полях cron хранятся значения минут, часов, дня месяца, месяца и дня недели, соответственно.

10 5 10 * * means run at 5:10 on every 10th of every month.

10 5 * 12 * means run at 5:10 on every day in december

10 5 * * 1  means run at 5:10 every Monday

Вы можете запустить его в течение нескольких месяцев, так как формат crontab принимает диапазоны. С апреля по декабрь будет 4-12 в этом случае для поля месяца. Но это не учитывает ваше желание ограничить его до 2009 года.

Не существует механизма для установки дат начала и окончания для cronjob. Разумеется, вы всегда можете script. Делайте cronjob каждый день и проверяйте текущую дату до 30/12. Если это 31/12, удалите его. Или что-то более продуманное.

Crontab

0 7 * * 6-12 command_X

будет делать то, что вы хотите частично, но он начнется с 1 июня и продлится до 31 декабря. Пропуск первой части июня и 31 декабря должен быть написан по сценарию в команде X.