Linux 使用crontab job send mail,电子邮件文本将变成名为ATT00001.bin的附加文件
我想在一台linux服务器上分析一些数据,然后将其作为电子邮件文本发送到我的电子邮件帐户,但是当我在shell命令中执行这个shell脚本时,它工作得很好,奇怪的是,当我将所有过程放入crontab作业中时,电子邮件文本将变成一个附加文件,有人可以帮助吗Linux 使用crontab job send mail,电子邮件文本将变成名为ATT00001.bin的附加文件,linux,shell,email,crontab,Linux,Shell,Email,Crontab,我想在一台linux服务器上分析一些数据,然后将其作为电子邮件文本发送到我的电子邮件帐户,但是当我在shell命令中执行这个shell脚本时,它工作得很好,奇怪的是,当我将所有过程放入crontab作业中时,电子邮件文本将变成一个附加文件,有人可以帮助吗 #* * * * * sh -x /opt/bin/exec.sh >> /opt/bin/mailerror 2>&1 /* exec.sh */ #/bin/sh cd /opt/bin ./analysis.s
#* * * * * sh -x /opt/bin/exec.sh >> /opt/bin/mailerror 2>&1
/* exec.sh */
#/bin/sh
cd /opt/bin
./analysis.sh > test
mail -s "Today's Weather" example@example.com < test
***sh-x/opt/bin/exec.sh>/opt/bin/mailerror 2>&1
/*exec.sh*/
#/垃圾箱/垃圾箱
cd/opt/bin
./analysis.sh>测试
邮件-s“今日天气”example@example.com<测试
但是,当我直接在shell命令行中执行exec.sh时,电子邮件将收到文本,有人能为我解释一下吗,谢谢。请确保在脚本中更改此内容。
#/bin/sh
取而代之
#!/bin/sh
来解决问题
脚本假定它是从特定目录运行的(请注意,几乎每个路径都是相对路径,而不是绝对路径)。cron恰好从另一个目录运行它
对出现在电子邮件上的文本的修复
mydir=$(dirname "$0") && cd "${mydir}" || exit 1
./opt/bin/analysis.sh > test
mail -s "Today's Weather" example@example.com < /opt/bin/test
我自己也遇到了同样的问题,只是我正在将文本输出传送到
mailx
-heriglom mailx 12.4 7/29/08
在命令行上运行脚本时,电子邮件显示为带有文本正文的普通电子邮件。然而,当我通过
crontab
运行完全相同的脚本时,电子邮件的正文作为附件出现——ATT00001.BIN(Outlook)、application/octet-stream(mutt)或“noname”(Gmail)
我做了一些研究来弄清楚这一点,但下面是:
问题
如果Mailx在文本输入中遇到未知/控制字符,它会将其转换为设置了application/octet stream mime类型的附件
从手册页:
对于包含除换行符和水平制表符以外的格式字符的任何文件
因此,您需要删除这些控制字符,这可以通过tr
echo "$Output" | /usr/bin/tr -cd '\11\12\15\40-\176' | mail ...
但是,因为我有挪威UTF8字符:æå-列表将展开,您不想维护这样的列表,我需要挪威字符
检查附件时,我发现只有范围为32-176的“常规”ASCII字符\r\n-所有字符都可打印和184和195-->UTF8
解决方案
在脚本中显式设置区域设置:
LANG="en_US.UTF8" ; export LANG
在shell中运行export
,如果运行csh
或tcsh
来确定您的语言环境设置为什么,则运行setenv
解释
Mailx-在shell中运行时-LANG设置为.UTF8,将正确识别UTF8字符并继续
在crontab
LANG中运行时,未设置LANG,默认为LANG=C,因为默认情况下,crontab将只运行一组受限的环境变量(取决于系统)
然后,mailx(或其他程序)将无法识别UTF8字符,并确定输入包含未知的控制字符
我的问题是UTF8字符,你的可能是输入中的其他控制字符。通过hextump
或od-c
运行它,但是由于它在常规shell中工作正常,我怀疑会出现LANG问题
参考文献:
cat logfile | tr -d \\r | mailx -s'the logfile' to-me@.....
感谢本论坛:
嘿,伙计,我尝试了每一种方法,但都失败了,我不知道该怎么办。请发布uname输出和完整的脚本输出。你能给我一封电子邮件吗,我会将所有文件发送给你。你尝试了后续答案吗??请在这里发布修改后的脚本。如果您需要帮助,请发布uname输出和完整的脚本输出。您的回答对我帮助很大。(我已经导出LANG=“ko_KR.utf8”)感谢您的回答。在脚本中设置语言为我解决了这个问题。
LANG="en_US.UTF8" ; export LANG
cat logfile | tr -d \\r | mailx -s'the logfile' to-me@.....