文件清空自己

时间:2009-10-01 16:50:10

标签: shell

你好我有一个发送电子邮件的shell脚本。 这是它的工作原理:

  • 它从网址读取html并放入 它在一个文件
  • 遍历所有电子邮件并进入 它从那个html文件中读取的循环
问题是:

  • html文件在a之后变空 几百封电子邮件不明显 原因。 (我把du /thehtml.html放在电子邮件日志中。)

任何人都知道为什么?感谢。

源:

/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

3 个答案:

答案 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

看看谁抱怨。