你好我有一个发送电子邮件的shell脚本。 这是它的工作原理:
任何人都知道为什么?感谢。
源:
/usr/local/bin/lynx --source http://www.site.com/email.php?message=1 > /root/lynx.html
read var < /root/lynx.html
if [ -z "$var" ]; then
echo "" > /dev/null
else
/usr/local/bin/lynx --source http://www.site.com/email.php?list=1 > /root/html_mail.html
number=0
OLDIFS = "$IFS"
export IFS=","
read mails < /root/html_mail.html
for mail in $mails; do
echo "To: $mail " > /root/finished_message.html
cat /root/lynx.html >> /root/finished_message.html
/usr/sbin/sendmail "$mail" < /root/finished_message.html
echo ".*. $number. " - ". $mail .*." >> /bin/scripts/email.log
du /root/lynx.html >> /bin/scripts/email.log
number=$((number+1))
done;
IFS = "$OLDIFS"
lynx --source http://www.site.com/email.php?done_with=1
fi
答案 0 :(得分:0)
这可能是一个竞争条件,其中2个进程正在尝试写入该文件,这会破坏它。但是,从您的描述中很难说出来。你试着将这个减少到最简单的代码来重现问题呢?
答案 1 :(得分:0)
尝试使用mktemp作为文件名。
我很确定你会在代码中的某处覆盖文件 - 通过并行运行代码。
尝试:
SOURCE_HTML=`mktemp lynx-XXXX.html`
lynx --source URL > $SOURCE_HTML
# the rest ...
另外 - 这是某种垃圾邮件生成器吗?
答案 2 :(得分:0)
尝试在else
:
chmod -w /root/lynx.html
看看谁抱怨。