"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
我们有一个 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