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

cronjob каждые 4 недели, не будет выполняться

Я использую cron на моем безголовом сервере ubuntu 18.04, и следующий cron не будет выполняться:

30 13 * * 6 test $((10#$(date +%W)%4)) -eq 1 && /bin/bash /backup/test.sh

Я протестировал команду в оболочке:

тест $ ((10 # $ (дата +% W)% 4)) -eq 1 && / bin / bash /backup/test.sh

и работает нормально, но я, если это не в cron, он его не выполняет.

Я благодарен за любую помощь.

Интересно, сработает ли это:

30 13 * * 6/4 /bin/bash /backup/test.sh

Я не уверен, будет ли он работать должным образом, но если мое понимание man 5 crontab правильно, он будет запускаться каждую четвертую субботу (но, возможно, не в те дни, которые указаны в вашем коде).


Также обратите внимание, что вам нужно избегать знаков процента в crontabs, и они не могут использовать башизмы вроде базы 10 через 10# (если вы не используете SHELL=/bin/bash в верхней части вашего crontab или вашего /bin/sh символическая ссылка на /bin/bash).

Может, попробуйте вместо этого:

30 13 * * 6   test $((1$(date +%%W)%%4)) -eq 1 && /bin/bash /backup/test.sh

Это убирает башизм и заменяет его конкатенацией, которая в противном случае поглощает ведущие нули (107%4 == 7%4 == 3 так как 100 делится на 4). Он также избегает знаков процента, поэтому crontab не пытается их интерпретировать.

В cron используется "неправильная" оболочка

Ваш тест кажется командой для использования синтаксиса, который может быть "неверно истолкован" некоторыми оболочками, кроме bash. Cron по умолчанию использует /bin/sh оболочка.

Возможные исправления на выбор:

а) заворачивать test аргумент в одинарных кавычках и принудительно "правая" оболочка

0 13 * * 6 /bin/bash -c 'test $((10#$(date +%W)%4)) -eq 0' && …

б) переместите вашу тестовую команду в отдельный исполняемый файл с явно выбранной оболочкой в ​​shebang:

#!/bin/bash
exec test "$((10#$(date +%W)%4))" -eq 1

в) изменить оболочку, используемую cron. В crontab добавить строку

SHELL=/bin/bash  

В вашем конкретном случае вариант «а» кажется лучшим, но аналогичные проблемы могут быть лучше решены другими вариантами.