Ошибка "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