Проблема с заданием, вызванным через cron (Ubuntu) - PullRequest
0 голосов
/ 11 июня 2019

Вызов задания с ошибками с использованием другого часового пояса

У нас есть следующий сценарий.Все серверы работают в UTC.У нас есть группа клиентов в США, и конфигурация приложения определяет работу для запуска в EST.(Это означает, что время работы изменяется относительно UTC для изменений летнего времени, т.е. работа выполняется в то же местное время).Проблема в том, что нам нужно вызвать другую работу из cron, которая запускается за час до работы приложения.Это новое задание проверяет дату и, если часть дня соответствует заданному значению, выполняет остальную часть кода и завершается, если нет.(Для целей теста сегодня 11-е)

Вот фрагмент скрипта (BASH):

TODAY=$(date +%d)
echo ${TODAY}
if [[ "${TODAY}" == "11" ]]
then
echo "Today is last day of month" 
# run my job
else
echo "Today is not last day of month" 
fi

Для усложнения вещей в нашем crontab есть следующее:

TZ='America/New_York'

Когда я запускаю скрипт из консоли, запись в журнале выглядит следующим образом:

11
Today is last day of month (as expected)

Когда я планирую скрипт из cron следующим образом:

46 11 * * *  /opt/mytest.sh 

Заданиеработает в 11:46 UTC с выводом журнала следующим образом:

11
Today is last day of month (as expected)

Когда я планирую скрипт из cron следующим образом:

50 11 * * * at -f /opt/mytest.sh 07:51 (invoke at job to run at 7:51 est, ie 1151 utc)

Задание записывается в журнал в 11:51 utc, но запись в журнале выглядит следующим образом:

11
Today is not last day of month (not my expected result)

Есть идеи?

1 Ответ

0 голосов
/ 11 июня 2019

Вы используете несколько bash расширений в скрипте.at использует значение $SHELL, чтобы определить, с какой оболочкой выполнять скрипт, и, вероятно, по умолчанию оно равно /bin/sh в cron.Поэтому установите переменную окружения соответствующим образом:

50 11 * * * SHELL=/bin/bash at -f /opt/mytest.sh 07:51 (invoke at job to run at 7:51 est, ie 1151 utc)
...