通常, cron 作业stdout
会stderr
通过电子邮件发送给我(根据MAILTO
中的设置crontab
)当工作完成时。
如果我的工作以fork
/ exec
(或简单地exec
)或 with开始另一项工作怎么办system("foo &")
?
- 子作业的
stdout
/会发生什么?stderr
我会通过电子邮件收到吗?
理想的结果是为父母和孩子发送一封单独的电子邮件,但我很确定我必须自己安排。
答案1
子进程从其父进程继承其 stdin、stdout 和 stderr。 Fork 和 exec 在 cron 作业中很常见(考虑一下在 shell 脚本中运行的每个命令都涉及 fork/exec)。输出通常会发送到同一个 cron 电子邮件。
将其发送到单独的邮件非常简单:只需将其 stdout/stderr 通过管道传输到mail
(或类似的):
#!/bin/sh
command-1 2>&1 | mail -s 'output 1' [email protected]
command-2 2>&1 | mail -s 'output 2' [email protected]
如果你想要 cron 的唯一电子邮件(如果不是空行为的话),更多实用程序包括一个方便的ifne
( … | ifne mail -s…
)。