我正在尝试将 .log 文件或 .txt 文件附加到 mail 命令,以便在执行 ksh 脚本后发送电子邮件。我无法使用 mutt 命令,因为它尚未安装在我的机器上,而且我不应该安装它。我通过谷歌搜索尝试了很多方法,但这并没有帮助我成功。
这是我的要求,我需要运行大约 10 个 sql 查询,结果需要通过附件发送到电子邮件中。我已经Check.ksh
并且正在使用nohup
命令运行它。
nohup Check.ksh > Valid_Check.log 2>&1 &
在 Check.ksh 中
typeset var TO="[email protected]";
typeset var SUB="Report";
typeset var BODY="Check Completed";
typeset var ATTACHMENT=${FILE_PATH}/Valid_Check.log
if [ -f "${ATTACHMENT}" ]; then
echo "Log file exist";
else
echo "No Log File";
fi
uuencode Valid_Check.log Valid_Check.log | mail -s "${SUB}" "${BODY}" ${TO}
并尝试了以下方法
#mailx -s "${SUB}" "${TO}" "${BODY}" < ${FILE_PATH}/Valid_Check.log
#cat ${FILE_PATH}/Valid_Check.log | mailx -s "${SUBJECT}" "${TO}" "${BODY}";
上面的代码抛出一个错误,如“有效...用户未知”
任何输入都会有帮助或任何其他简单/容易的方法?
谢谢,
答案1
如果您有足够新的文件mailx
,请使用-a
添加附件的选项。
mailx -s "$SUB" -a "Valid_Check.log" "$TO" <<<"$BODY"
也可以看看https://access.redhat.com/solutions/104833
如果您无可救药地停留在上个千年,并且没有任何可以处理正确附件的软件,则只需将 uuencode 数据附加到正文中即可。
( echo "$BODY"; echo; uuencode Valid_check.log Valid_check.log ) |
mailx -s "$SUB" "$TO"
不过,基本方法会遇到竞争条件 - 输出文件的存在表明 cron 作业已经开始,没做完。将 mail 命令放在 cron 作业的末尾可以解决这个问题;然后,只有在上一步完成后才会发送电子邮件。