Назад | Перейти на главную страницу

Запуск 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

Но как насчет нечетных дней?

Я нашел это на unix.stackexchange:

Синтаксис, который вы пробовали, на самом деле неоднозначен. В зависимости от того, сколько дней в месяце, в некоторые месяцы он будет работать по нечетным дням, а некоторые - по четным. Это связано с тем, что при его вычислении общее количество возможных вариантов делится на части. Вы можете обойти это странное поведение, указав вручную диапазон дней и используя четное или нечетное количество дней. Поскольку сценарии четного дня никогда не будут выполняться на 31-й день более длинных месяцев, вы ничего не потеряете, используя 30 дней в качестве основы для четных дней, и, указав специально, чтобы разделить их, как если бы было 31 день, вы можете принудительно -дневное исполнение.

Синтаксис будет выглядеть так:

Будет работать только в нечетные дни: 0 0 1-31/2 * * command

Будет работать только в четные дни: 0 0 0-30/2 * * command

Ваша озабоченность по поводу того, что в месяцах не одинаковое количество дней, здесь не важна, потому что ни у одного месяца нет БОЛЬШЕ дней, чем это, а для плохого февраля диапазон дат просто никогда не будет совпадать с последним днем ​​или двумя, но это не повредит, если это перечислено.

Источник: Нечетный / Четный Cron

Конечно, лучшим решением было бы просто использовать подходящий сценарий резервного копирования MySQL, предназначенный для еженедельного, ежемесячного и ежегодного хранения?

Automysqlbackup должен работать идеально.

http://sourceforge.net/projects/automysqlbackup/

Я сделал это по-своему ;)

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