#cron
#cron
Вопрос:
Мне нравится запускать резервные копии для всех будних дней, кроме субботы. Моя запись в crontab
30 16 * * 1,2,3,4,5 ./backup.sh
Эта запись работает нормально.
Кроме того, я хотел бы возобновить работу в 1-ю, 3-ю субботу.
Если за месяц доступен какой-либо 5-й день, то должна быть запущена резервная копия. Какой будет запись для crontab? Я предполагаю
30 16 1-7, 15-21, 29-31 * 6 ./backup.sh
Я прав?
Комментарии:
1. Добро пожаловать в StackOverflow! К сожалению, этот вопрос на самом деле не относится к StackOverflow, потому что он не имеет ничего общего с программированием. Этот вопрос относится к ServerFault .
Ответ №1:
Я прав?
Нет, вы не правы. В руководстве по crontab указано:
Примечание: День выполнения команды может быть указан в следующих двух полях: день месяца и день недели. Если оба поля ограничены (т.Е. не содержат символа «*»), команда будет запущена, когда любое из полей соответствует текущему времени. Например,
30 4 1,15 * 5
приведет к запуску команды в 4:30 утра 1 и 15 числа каждого месяца, плюс каждую пятницу.
Итак, как мы можем это сделать?
Если вы хотите определить, какая сегодня суббота месяца, то есть 1-я, 2-я или 3-я суббота месяца, все, что вам нужно сделать, это посмотреть на день недели субботы и выполнить следующее вычисление целого числа:
D=$(date " %d")
echo $(( (D-1)/7 1 ))
Это значение вернет соответствующее число. Это работает не только по субботам, но и в любой будний день.
Поскольку OP хочет, чтобы cron работал в 1-ю, 3-ю и, возможно, в 5-ю субботу, фактически указано, что cron запускается в каждую субботу с нечетным номером:
D=$(date " %d")
echo $(( ((D-1)/7 1) % 2 ))
Использование этого в качестве дополнительного теста позволяет нам записать cron как:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
30 16 * * 6 (( (($(date " %d") - 1)/7 1) % 2 == 1 )) amp;amp; command