Я хочу настроить что-то вроде этого.
- Я хочу запускать работу "X" в 7 часов утра, начиная с 29 июня /2009 года по 30/12/2009. Рассматривайте текущую дату как 4/4/2009.
Я хочу настроить что-то вроде этого.
Это можно сделать сложным способом.
Вам нужно три отдельных задания cron
для этого диапазона, все они запускают один и тот же код (X
в этом случае):
"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
Тогда не будет никакого значения, если вы забудете отключить задания.
Да, в основном. Некоторые реализации 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
Я обычно поклонник сохранения логики с запущенной программой. Вы можете подумать о настройке одного задания cron, которое запускает script каждый день, а затем script самостоятельно решить, нужно ли делать что-либо полезное. Когда последний полезный день (30 декабря) прошел, ваш script может удалить себя из crontab. В script вы можете настроить логику со всеми комментариями, необходимыми для описания того, что вы делаете и почему.
Если ваше задание является двоичной программой, вы можете настроить run_script, который выполняет эту фильтрацию расписания, прежде чем вызывать программу.
Вы можете использовать это для создания crontab, который выполняется через определенные промежутки времени:
http://www.robertplank.com/cron/
Или это
http://www.webmaster-toolkit.com/cron-generator.shtml
Одним из решений было бы установить 6 кронов, 1 за каждый месяц, каждый из которых будет работать в 7 утра каждый день в этом месяце.
Это, наверное, самый простой способ, следующий - script.
Нет, афайк, ты не можешь этого сделать.
В полях 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.