Использование 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
В принципе, ваше решение правильное. Вы просто допустили простую синтаксическую ошибку в bash. Вам нужно поставить пробелы вокруг символов '[' и ']':
[ $? == 1 ]
Я проверил это на своем боксе, и это работает. Я бы также предложил проверить код ошибки как не равный 0 ([ $? -ne 0 ]), если вы не уверены, что хотите реагировать только на код ошибки 1.
Любой из следующих вариантов должен работать:
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 - успех, все остальное - провал).
Во втором случае для правильной работы нужен пробел между [
и $?
.