Я хочу настроить что-то вроде этого.Имеет ли выражение cron в unix/linux указание точных дат начала и окончания
- Я хочу запустить вакансию 'X' в 7:00 каждый день, начиная с 29 июня/2009 года по 30/12/2009. Рассматривайте текущую дату как 4/4/2009.
Я хочу настроить что-то вроде этого.Имеет ли выражение cron в unix/linux указание точных дат начала и окончания
Вы можете использовать это, чтобы создать кронтаб, который работает через определенные промежутки времени:
http://www.robertplank.com/cron/
Или этого
http://www.webmaster-toolkit.com/cron-generator.shtml
Одно решение было бы установить 6 crons, 1 за каждый месяц каждый будет работать в 7 утра каждый день в этом месяце.
Это, наверное, самый простой способ, следующий из них - это сценарий.
Нет, афайк, вы не можете этого сделать.
В полях 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. Конечно, вы всегда можете это сценаризировать. Делайте cronjob каждый день и проверяйте текущую дату до 30/12. Если это 31/12, удалите его. Или что-то более продумано.
кронтаб из
0 7 * * 6-12 command_X
будет делать то, что вы хотите частично, но было бы начать с 1-го июня и проходит через 31 декабря. Пропуск первой части июня и 31 декабря должен быть написан в команде X.
Это может быть сложным способом.
Вам нужно три отдельных 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 запускать задание.
Обратите внимание, что вам нужно оставить свой скрипт неисполняемым до тех пор, пока вы его не запустите.
Следующие выражения 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's 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, которое запускает скрипт каждый день, а затем сам сценарий самостоятельно определит, нужно ли ему что-либо делать. Когда последний полезный день (30 декабря) прошел, ваш скрипт может удалить себя из crontab. В скрипте вы можете настроить логику со всеми комментариями, необходимыми для описания того, что вы делаете и почему.
Если ваша работа представляет собой двоичную программу, вы можете настроить run_script, который выполняет эту фильтрацию расписания, прежде чем вызывать программу.
Мне было бы не согласиться - хотя это немного зависит от того, предположите ли вы, что программа будет служить другой цели, кроме как при запуске через cron (а Unix geeks действительно считают, что это будет). Если это служит общей цели, то либо создание в тайном наборе правил, чтобы решить, когда оно должно быть запущено, либо разбор файла конфигурации, является серьезным излишеством и не рекомендуется (если, возможно, у вас уже есть инструменты в вашей библиотеке, чтобы выполнить проверка). Гораздо лучше позволить «cron» или вариант справиться с этим! –
Я действительно искал способ выполнить задание cron до нужной даты, возможно, создав второе задание, чтобы удалить оба, до тех пор, пока я не крашу ваши слова о том, что сценарий сам по себе решит, нужно ли делать что-нибудь полезное ». Вместо того, чтобы создавать кучу заданий, я просто создаю один, чтобы каждый день вызывать свой скрипт, и он решит, есть ли что-то делать. – StackUnder