bash - cron执行脚本时“无效或不完整的多字节或宽字符”

时间:2012-04-29 10:01:29

标签: bash cron

我有一个使用mailx发送电子邮件的bash脚本。邮箱配置在.mailrc中。我以root身份运行它:

linux:~ # ./lprojekt.sh
Resolving host smtp.gmail.com . . . done.
Connecting to 173.194.70.109 . . . connected.
220 mx.google.com ESMTP n20sm30980415wiw.5
>>> EHLO linux.site
250-mx.google.com at your service, [95.49.133.188]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO linux.site
250-mx.google.com at your service, [95.49.133.188]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
>>> AUTH LOGIN
334 VXNlcm5hbWU6
>>> bG1mYnlkYjlAZ21haWwuY29t
334 UGFzc3dvcmQ6
>>> cHJvamVrdDEyMz==
235 2.7.0 Accepted
>>> MAIL FROM: <lmfbydb9@gmail.com>
250 2.1.0 OK n20sm30980415wiw.5
>>> RCPT TO: <daniel@gadawski.pl>
250 2.1.5 OK n20sm30980415wiw.5
>>> DATA
354  Go ahead n20sm30980415wiw.5
>>> .
250 2.0.0 OK 1335692819 n20sm30980415wiw.5
>>> QUIT
221 2.0.0 closing connection n20sm30980415wiw.5

如您所见,它运行正常。

但是,当我尝试使用cron运行此脚本时出现问题。

这是我的/ etc / crontab内容:

SHELL=/bin/bash
PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin
MAILTO=root
HOME=/root
#
# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly
#
-*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null

* * * * * root /root/lprojekt.sh >> /root/Desktop/log.txt

每分钟(现在仅用于调试),root用户获取邮件:

Message 40:
From root@linux.site  Sun Apr 29 13:50:01 2012
X-Original-To: root
Delivered-To: root@linux.site
From: root@linux.site
To: root@linux.site
Subject: Cron <root@linux> /root/lprojekt.sh >> /root/Desktop/log.txt
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Sun, 29 Apr 2012 13:50:01 +0200 (CEST)

Invalid or incomplete multibyte or wide character
. . . message not sent.

这个问题的原因是什么?怎么解决?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

由于对mark a comment as an answer的功能请求仍然被拒绝,我在此处复制上述解决方案。

你确定它是LC_TYPE而不是LC_CTYPE吗?后者应该是正确的拼写。区域设置变量POSIX或pl_PL.UTF-8的其他值是什么?您可以直接在crontab文件中设置环境变量,就像使用SHELL一样。尝试将LC_CTYPE和/或LC_ALL和/或LANG设置为pl_PL.UTF-8。或者也许从脚本及其使用的数据文件中查找并删除非ASCII字符。 - n.m。

你是对的,有LC_CTYPE而不是LC_TYPE。其他变量是POSIX。我已添加到脚本这一行:export LC_CTYPE = pl_PL.UTF-8并且它可以工作。非常感谢您的帮助! - Daniel Gadawski