Ошибка "tput: нет значения для $TERM и не указано -T", зарегистрированное процессом CRON

У нас есть сценарий оболочки, который запускается CRON. Сценарий оболочки, в свою очередь, запускает скрипт python, который загружает файлы с FTP-сервера, а затем запускает для этих файлов процессор журналов Java. Процесс работает просто отлично, за исключением того, что я продолжаю получать электронные письма CRON, даже если ошибок нет. По крайней мере, я думаю, что нет ошибки. В электронном письме cron есть две строки, одна из которых

tput: No value for $TERM and no -T specified

После небольшого исследования я обнаружил, что это связано с установкой переменной $TERM. Я не уверен, как это сделать. Любая помощь будет оценена. Спасибо!

3 ответа

Решение

Что-то в сценарии вызывает tput двоичный файл. tput попытки осмотреть $TERM переменная для определения текущего терминала, чтобы он мог производить правильные последовательности управления. Когда cron запущен, терминала нет, поэтому вы получаете эту ошибку от tput,

Вы можете вручную назначить TERM значение для задания cron (вероятно, dumb или что-то подобное) или (и это, вероятно, лучшее решение) вы можете узнать, что звонит tput и удали этот звонок.

Демон cron запускается пользователем root в своей собственной оболочке. По умолчанию, cron добавляет системную почту, отправленную пользователю, выполняющему скрипт (поэтому вы видите отправителя в системной почте как "root"). "Пользователь" - это пользователь, в который вы вошли, как при настройке crontab. Почта будет содержать консоль и сообщения об ошибках. В Ubuntu почтовый файл можно просмотреть по адресу /var/mail/<username>,

Если нет $TERM переменная установлена, cron будет выдавать tput: No value for $TERM and no -T specified ошибка в почтовом файле. Чтобы остановить эти ошибки, установите $TERM переменная с помощью TERM=dumb (или другой доступный терминал в вашей системе, например xterm) в crontab. toe Команда покажет вам определения terminfo в текущей системе. Если вам не хватает этой команды, вы можете увидеть необработанные данные в /usr/share/terminfo на большинстве систем Linux.

Даже если вы устранили ошибки, вы все равно можете получить системную почту с консольными сообщениями. Этот файл заполняется как журнал со временем, поэтому вы можете захотеть остановить эти сообщения. Чтобы остановить системную почту cron, установите MAILTO переменная с помощью MAILTO=""

Таким образом, ваш crontab может выглядеть так:

MAILTO=""
TERM=xterm

* * * * * sh /path/to/myscript.sh

Вы можете просмотреть crontab (для пользователя, в котором вы вошли как) с помощью crontab -l.


-> МОЕ РАБОЧЕЕ РЕШЕНИЕ ДЛЯ ПРОБЛЕМЫ TPUT:


      # when $TERM is empty (non-interactive shell), then expand tput with '-T xterm-256color'
[[ ${TERM}=="" ]] && TPUTTERM='-T xterm-256color' \
                  || TPUTTERM=''

declare -r    RES='tput${TPUTTERM} sgr0'       REV='tput${TPUTTERM} rev'
declare -r    fRD='tput${TPUTTERM} setaf 1'    bRD='tput${TPUTTERM} setab 1'
declare -r    fGN='tput${TPUTTERM} setaf 2'    bGN='tput${TPUTTERM} setab 2'
...
echo ${fRD}" RED Message: ${REV} This message is RED REVERSE. "${RES}
echo ${fGN}" GREEN Message: ${REV} This message is GREEN REVERSE. "${RES}
...

Таким образом, нет смысла использовать интерактивную или неинтерактивную оболочку - tput по-прежнему работает нормально.

6a5h4

Другие вопросы по тегам