2012-04-29 129 views
1

執行腳本時,我有一個bash腳本使用的mailx發送電子郵件。郵箱配置位於.mailrc中。我運行它作爲一個根:慶典 - 「無效或不完整的多字節字符或寬字符」由cron

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: <[email protected]> 
250 2.1.0 OK n20sm30980415wiw.5 
>>> RCPT TO: <[email protected]> 
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 [email protected] Sun Apr 29 13:50:01 2012 
X-Original-To: root 
Delivered-To: [email protected] 
From: [email protected] 
To: [email protected] 
Subject: Cron <[email protected]> /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

插入'locale'命令的調用你的腳本,從終端和從cron運行時比較輸出。 – 2012-04-29 14:16:43

+1

一條線的區域設置輸出的不同的是: 的cron: LC_TYPE = 「POSIX」 手動執行: LC_TYPE = pl_PL.UTF-8 如何設置爲LC_TYPE cron的? – 2012-04-30 08:07:27

+1

你確定它是LC_TYPE而不是LC_CTYPE嗎?後者應該是正確的拼寫。區域設置變量POSIX或pl_PL.UTF-8的其他值是什麼?您可以直接在crontab文件中設置環境變量,就像使用SHELL一樣。嘗試將LC_CTYPE和/或LC_ALL和/或LANG設置爲pl_PL.UTF-8。或者可能從您的腳本及其使用的數據文件中找到並刪除非ASCII字符。 – 2012-04-30 10:24:12

回答

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字符。 - 中午

你說得對,有LC_CTYPE代替LC_TYPE。其他變量是POSIX。我已經添加到腳本這一行:export LC_CTYPE = pl_PL.UTF-8,它的工作原理。非常感謝您的幫助! - 丹尼爾Gadawski

相關問題