手动执行脚本没有出现中文乱码,用crontab执行脚本时中文全部是是乱码。
产生原因
这是因为Unix/Linux下使用crontab时的运行环境已经不是用户环境了,因此原本用户下的一些环境变量的设置就失效了。例如原来用户环境变量设置的是GB2312,但是使用crontab运行时的环境变量就可能是ISO8859-1,所以需要在脚本里额外添加缺失的环境变量,针对中文问题,需要声明 LANG参数。
解决方法
先要知道系统的LANG参数是什么,打开 /etc/sysconfig 目录中的?i18n 文件可以查到。
也可以在终端中执行命令?echo $LANG 得到编码,在我的服务器中输出的是 zh_CN.UTF-8
打开 /var/spool/cron 目录中的脚本文件,在头部加入:
LANG="zh_CN.UTF-8" export LANG
把时间改到下一分钟,测试下看看吧!