"tput: No value for $TERM and no -T specified " CRON 进程记录的错误

"tput: No value for $TERM and no -T specified " error logged by CRON process

我们有一个 shell 脚本,它是 CRON 的 运行。 shell 脚本又 运行 是一个 python 脚本,它从 FTP 服务器下载文件,然后 运行 是这些文件上的 java 日志处理器.这个过程 运行 很好,除了我继续收到 CRON 电子邮件,即使没有错误。至少,我认为没有错误。 cron 电子邮件有两行,其中一行是

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

经过一番研究,我发现这与设置 $TERM 变量有关。我不确定,该怎么做。任何帮助,将不胜感激。谢谢!

脚本中的某些东西正在调用 tput 二进制文件。 tput 尝试检查 $TERM 变量以确定当前终端,以便它可以生成正确的控制序列。当 cron 为 运行 时没有终端,因此您从 tput.

得到该错误

您可以手动为 cron 作业分配一个 TERM 值(可能 dumb 或类似的东西)或者(这可能是更好的解决方案)您可以找出是什么调用 tput 并删除该调用。

cron 守护程序由 'root' 用户在其自己的 shell 中 运行。默认情况下,cron 将附加发送给用户 运行ning 脚本的系统邮件(这就是为什么您在系统邮件中看到发件人为 'root' 的原因)。 'user' 是您在设置 crontab 时登录的用户。该邮件将包含控制台和错误消息。在 Ubuntu,可在 /var/mail/<username>.

查看邮件文件

如果未设置 $TERM 变量,cron 将在邮件文件中发出 tput: No value for $TERM and no -T specified 错误。要停止这些错误,请在 crontab 中使用 TERM=dumb(或系统中的其他可用终端,如 xterm)设置 $TERM 变量。 toe 命令将显示当前系统上的术语信息定义。如果缺少该命令,您可以在大多数 Linux 系统上的 /usr/share/terminfo 中看到原始数据。

即使您已停止错误,您仍可能会收到带有控制台消息的附加系统邮件。随着时间的推移,该文件将像日志一样填满,因此您可能希望停止这些消息。要停止 cron 系统邮件,请使用 MAILTO=""

设置 MAILTO 变量

因此您的 crontab 可能如下所示:

MAILTO=""
TERM=xterm

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

您可以使用 'crontab -l' 查看 crontab(对于您登录的用户)。


--> 我对 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}
...

这样,无论是交互式还是非交互式都没有意义 shell - tput 仍然可以正常工作。

6a5h4