Разъяснение задания подоболочки

Системные -широкие кронтабы имеют пять полей даты и времени в каждой строке, затем имя пользователя для запуска задания cron, а затем командную строку. В вашем случае поля времени выглядят нормально, но шестое поле [`dateдовольно странно для имени пользователя. Сообщение об ошибке намекает на это.

Поскольку вы упомянули rootпосле фрагмента в скобках, я думаю, что вы, возможно, просто неправильно разместили имя пользователя, поэтому вы должны были:

0 1 1-7 * 6 root [`date +\%d` == 06] && /home/test/cron-test.sh

Это по-прежнему имеет проблему, заключающуюся в том, что [является такой же командой, как и другие, поэтому вы должны использовать пробелы после [и перед ]. И ==не является эталоном для сравнения, =является. Кроме того, для подстановки команд $(cmd)лучше, чем обратные кавычки, так что давайте попробуем:

0 1 1-7 * 6 root [ $(date +\%d) = 06 ] && /home/test/cron-test.sh

Но date +%dсообщает день месяца, и теперь вы работаете только шестого числа месяца (независимо от дня недели ). Третье и пятое поля (день месяца и день недели )работают вместе немного странно :cronjob запускается, если одно из из них совпадает. Но мы хотим запускать только в субботу и только с первого по седьмой день месяца, поэтому нам нужно вручную проверить одно из условий.

0 1 1-7 * * root [ $(date +\%u) -eq 6 ] && /home/test/cron-test.sh

Задание cron запускается все первые семь дней месяца, но ручная проверка [ $(date +%u) -eq 6 ]проверяет, что день недели — суббота, перед фактическим запуском основной команды.

(В некоторых версиях справочной страницы crontab(5)есть почти такой же пример, но я не могу найти его онлайн-версию.)

0
26.07.2019, 08:09
0 ответов

Теги

Похожие вопросы