Запуск cronjob в нечетные дни
В настоящее время я запускаю свой скрипт резервного копирования MySQL каждый день недели:
0 1 * * 1 sh /root/mysql_monday.sh
0 1 * * 2 sh /root/mysql_tuesday.sh
0 1 * * 3 sh /root/mysql_wednesday.sh
0 1 * * 4 sh /root/mysql_thursday.sh
0 1 * * 5 sh /root/mysql_friday.sh
0 1 * * 6 sh /root/mysql_saturday.sh
0 1 * * 0 sh /root/mysql_sunday.sh
Теперь я хотел бы хранить резервные копии еще одну неделю, так что в общей сложности две недели, чтобы быть в большей безопасности.
Например: я, хотя я могу создать один файл резервной копии в понедельник в четные дни, а затем снова в нечетные дни.
В течение четных дней я могу просто использовать:
0 1 */2 * 1 sh /root/mysql_monday_even.sh
0 1 */2 * 2 sh /root/mysql_tuesday_even.sh
0 1 */2 * 3 sh /root/mysql_wednesday_even.sh
0 1 */2 * 4 sh /root/mysql_thursday_even.sh
0 1 */2 * 5 sh /root/mysql_friday_even.sh
0 1 */2 * 6 sh /root/mysql_saturday_even.sh
0 1 */2 * 0 sh /root/mysql_sunday_even.sh
Но как насчет нечетных дней?
4 ответа
Я сделал это по-своему;)
0 1 1,15,29 * * sh /root/mysql_monday.sh
0 1 2,16,30 * * sh /root/mysql_tuesday.sh
0 1 3,17,31 * * sh /root/mysql_wednesday.sh
0 1 4,18 * * sh /root/mysql_thursday.sh
0 1 5,19 * * sh /root/mysql_friday.sh
0 1 6,20 * * sh /root/mysql_saturday.sh
0 1 7,21 * * sh /root/mysql_sunday.sh
0 1 8,22 * * sh /root/mysql_monday2.sh
0 1 9,23 * * sh /root/mysql_tuesday2.sh
0 1 10,24 * * sh /root/mysql_wednesday2.sh
0 1 11,25 * * sh /root/mysql_thursday2.sh
0 1 12,26 * * sh /root/mysql_friday2.sh
0 1 13,27 * * sh /root/mysql_saturday2.sh
0 1 14,28 * * sh /root/mysql_sunday2.sh
Я нашел это на unix.stackexchange:
Синтаксис, который вы пробовали, на самом деле неоднозначен. В зависимости от того, сколько дней в месяце, некоторые месяцы будут работать в нечетные дни, а некоторые - в четные. Это потому, что способ расчета рассчитывает общее количество возможностей и разделяет их. Вы можете переопределить это поведение strage-ish, вручную указав диапазон дней и используя нечетное или четное количество дней. Поскольку четные дневные сценарии никогда не будут выполняться в 31-й день более длинных месяцев, вы ничего не потеряете, используя 30 дней в качестве базы для четных дней, и, указав специально для деления, как если бы было 31 день, вы можете вызвать нечетные исполнение.
Синтаксис будет выглядеть так:
Будет работать только в нечетные дни:
0 0 1-31/2 * * command
Будет работать только в четные дни:
0 0 0-30/2 * * command
Ваше беспокойство по поводу того, что месяцы не имеют одинакового количества дней, здесь не важно, потому что ни в одном месяце не будет БОЛЬШЕ дней, чем в этом, а для плохого февраля диапазон дат просто не будет совпадать с последним днем или двумя, но это не принесет вреда, если это в списке.
Источник: Нечетный / Четный Крон
Конечно, лучшим решением было бы просто использовать подходящий сценарий резервного копирования MySQL, предназначенный для еженедельного, ежемесячного, ежегодного хранения?
Automysqlbackup должен работать просто идеально.
Генератор Crontab