Sea*_*ull 11 unix linux shell cron tput
我们有一个由CRON运行的shell脚本.shell脚本依次运行python脚本,该脚本从FTP服务器下载文件,然后在这些文件上运行java日志处理器.这个过程运行得很好,除非我没有错误地继续收到CRON电子邮件.至少,我认为没有错误.cron电子邮件有两行,其中一行是
tput: No value for $TERM and no -T specified
Run Code Online (Sandbox Code Playgroud)
经过一番研究后,我发现它与设置$ TERM变量有关.我不确定,怎么做.任何帮助,将不胜感激.谢谢!
cron守护程序由'root'用户在其自己的shell中运行.默认情况下,cron将附加发送给运行脚本的用户的系统邮件(这就是您在系统邮件中将发件人视为"root"的原因)."用户"是您在设置crontab时登录的用户.邮件将包含控制台和错误消息.在Ubuntu上,邮件文件可在以下位置查看/var/mail/<username>.
如果未$TERM设置变量,cron将tput: No value for $TERM and no -T specified在邮件文件中发出错误.要停止这些错误,请在crontab中$TERM使用TERM=dumb(或系统中的其他可用终端)设置变量xterm.该toe命令将显示当前系统上的terminfo定义.如果缺少该命令,则可以/usr/share/terminfo在大多数Linux系统上查看原始数据.
即使您已经停止了错误,您仍然可以获得带有控制台消息的附加系统邮件.此文件将随着时间的推移填充,因此您可能希望停止这些消息.要停止cron系统邮件,请MAILTO使用设置变量MAILTO=""
所以你的crontab可能看起来像:
MAILTO=""
TERM=xterm
* * * * * sh /path/to/myscript.sh
Run Code Online (Sandbox Code Playgroud)
您可以使用'crontab -l'查看crontab(对于您登录的用户).
脚本中的某些内容正在调用tput二进制文件。tput尝试检查$TERM变量以确定当前端子,以便可以产生正确的控制序列。cron运行时没有终端,因此您可以从中得到该错误tput。
您可以手动TERM为cron作业分配一个值(可能dumb或类似的值),或者(这可能是更好的解决方案),您可以找出正在调用的内容tput并删除该调用。