多OS-COMMAND的过程是冲突的呼吁(Multiple OS-COMMAND calls fro

2019-10-20 05:48发布

我有被写入文件,使用电子邮件发送它的程序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 

Answer 1:

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.


Answer 2:

这看起来像一个路径问题的给我。

在你的输出流陈述你从来没有定义文件将被写入路径。 这将导致路径是任何应用程序,这是下运行的当前工作目录。 当前的工作目录的路径不一定是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.



Answer 3:

如果我理解正确,进展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)

我希望这会帮助你。 :)



文章来源: Multiple OS-COMMAND calls from procedure are conflicting