Использование оператора If в Crontab для генерации предупреждения

Использование busybox date кажется правильным выбором:

$ busybox date -uD '%d/%m/%Y' -d '09/07/2016'
Sat Jul  9 00:00:00 UTC 2016

Это работает, потому что busybox date принимает формат (-D) для чтения даты внутри -d.

Чтобы сделать команду более надежной и построить именно тот формат, который вы просите:

$ LC_ALL=C busybox date -uD '%d/%m/%Y' -d '09/07/2016' +'%a, %b %d, %Y %r'
Sat, Jul 09, 2016 12:00:00 AM

Busybox date command.

3
15.09.2016, 09:13
2 ответа

В принципе, ваше решение правильное. Вы просто допустили простую синтаксическую ошибку в bash. Вам нужно поставить пробелы вокруг символов '[' и ']':

[ $? == 1 ]

Я проверил это на своем боксе, и это работает. Я бы также предложил проверить код ошибки как не равный 0 ([ $? -ne 0 ]), если вы не уверены, что хотите реагировать только на код ошибки 1.

4
27.01.2020, 21:22

Любой из следующих вариантов должен работать:

30 08 * * * /usr/bin/php /var/www/html/phpscript1.php > /var/www/html/phpscript1.log 2>&1 || <Generate Mail>
30 08 * * * /usr/bin/php /var/www/html/phpscript1.php > /var/www/html/phpscript1.log 2>&1 ; [ $? -ne 0 ] && <Generate Mail>

Первый использует логическое OR || вместо логического AND &&, которое основано на возвращаемом значении из вашего скрипта (0 - успех, все остальное - провал).

Во втором случае для правильной работы нужен пробел между [ и $?.

0
27.01.2020, 21:22

Теги

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