我有被写入文件,使用电子邮件发送它的程序mail_files
,然后一个OS-DELETE
语句删除该文件发出后。 需要将呼叫外部过程调用mail_files
或实际OS-COMMAND
本身是异步的。 该操作系统是AIX 6和进步的版本是102B。 下面是下面的例子:
以下是主要步骤:
DEFINE STREAM outStr.
OUTPUT STREAM outStr TO foo.txt.
FOR EACH customer NO-LOCK:
EXPORT STREAM outStr customer.
END.
OUTPUT STREAM outStr CLOSE. /*EDIT: The problem occurs even if it's closed*/
RUN sendmail.p.
OS-DELETE foo.txt.
这里是sendmail.p:
DEFINE STREAM stMail.
OUTPUT STREAM stMail THROUGH
"mail_files -f foo@bar.com -t me@here.com -s\"subject\" -b~\foo.txt\").
PUT STREAM stMail "Email body".
OUTPUT STREAM stMail CLOSE.
在测试它在我自己,我不能复制错误。 进步试图在这里“优化”的东西吗? 有什么干净让它做我想做的没有硬编码的暂停?
编辑:该流的电子邮件尝试之前被关闭,但仍然出现错误。 没有部分文件被发送。
我得到的错误是从mail_files
,因为它无法找到该文件。 我检查,并没有其他进程正在按计划运行这将访问文件。
No such file or directory
/usr/local/bin/mail_files[268]: foo.txt: cannot open
DEFINE STREAM outStr.
OUTPUT STREAM outStr TO foo.txt.
FOR EACH customer NO-LOCK:
EXPORT STREAM outStr customer.
END.
/* Dont forget to close */
OUTPUT STREAM outStr CLOSE.
RUN sendmail.p.
OS-DELETE foo.txt.
这看起来像一个路径问题的给我。
在你的输出流陈述你从来没有定义文件将被写入路径。 这将导致路径是任何应用程序,这是下运行的当前工作目录。 当前的工作目录的路径不一定是mail__files正在读(这似乎是/ usr / local / bin目录)相同的路径。
我会建议您更新的代码如下:
OUTPUT STREAM outStr TO /usr/tmp/foo.txt.
和
OUTPUT STREAM stMail THROUGH "mail_files -f foo@bar.com -t me@here.com -s\"subject\" -b\"/usr/tmp/foo.txt\").
...或者你可以只尝试更新这条线指向位于/ usr / local / bin目录(虽然在/ usr / local / bin目录并没有真正打我作为临时文件相应的目录):
OUTPUT STREAM outStr TO /usr/local/bin/foo.txt.
如果我理解正确,进展mail_files使用它之前将您的文件。
如果这是,你可以使用独特的文件,cron,删除是supperior某一日期的所有文件。
例如:
DEFINE VARIABLE wlc-Identifiant AS CHARACTER NO-UNDO.
DEFINE VARIABLE wlc-file-txt AS CHARACTER NO-UNDO.
wlc-Identifiant = STRING(YEAR(TODAY), "9999") + STRING(MONTH(TODAY), "99") + STRING(DAY(TODAY), "99") + REPLACE(STRING(TIME, "HH:MM:SS"), ":", "").
wlc-file-txt = wlc-Identifiant + "foo.txt".
DEFINE STREAM outStr.
OUTPUT STREAM outStr TO VALUE (wlc-file-txt).
FOR EACH customer NO-LOCK:
EXPORT STREAM outStr customer.
END.
OUTPUT STREAM outStr CLOSE.
RUN sendmail.p (INPUT wlc-file-txt). /* add the file in parameter */
/*OS-DELETE foo.txt.*/ /* It 's a cron job */
在sendmail.p:
DEFINE INPUT PARAMETER wlpic-file-txt AS CHARACTER NO-UNDO.
DEFINE STREAM stMail.
OUTPUT STREAM stMail THROUGH
"mail_files -f foo@bar.com -t me@here.com -s\"subject\" -b~\" + wlpic-file-txt + "\").
PUT STREAM stMail "Email body".
OUTPUT STREAM stMail CLOSE.
和:用cron,删除已创建有旧的文件今天 - 1(这是一个examle)
我希望这会帮助你。 :)