2

我们有许多通过相当大的网络收集各种统计数据的 cron 作业。这些 cron 作业中的大多数都没有得到很好的监控。我想编写一个 perl 脚本,我们可以将这些作业的输出通过管道传输到,如下所示:

5 * * * * collectstats.pl 2>&1 1>/dev/null | scriptwatcher.pl

这个想法是来自 collectstats.pl 的 stdout 被丢弃,stderr 通过管道传输到 scriptwatcher.pl。然后,第二个脚本可以在出现错误时采取适当的措施,很可能给我发电子邮件。通过快速测试,这是可行的,除了在 scriptwatcher 中我需要知道发送错误的脚本的名称。只需要一点点信息,我想做的一切都成为可能。

此外,是否可以同时将标准输出从 collectstats 传输到另一个脚本?即一个脚本的2个管道?

干杯

4

2 回答 2

4

把它转过来做:

5 * * * * scriptwatcher.pl collectstats.pl any extra args

并让您的 scriptwatcher.pl 处理重定向并运行其参数中给出的脚本。

于 2013-01-17T05:22:29.007 回答
1

使用该行:

5 * * * * collectstats.pl 2>&1 1>/dev/null | scriptwatcher.pl collectstats.pl

也就是说,告诉脚本观察者它正在观察哪个脚本。

或者,正如ysth在他的回答中所建议的那样,已经scriptwatcher运行了它应该观看的脚本,比如nohupsu可以为您运行其他命令。这避免了您必须两次命名脚本。如果重复是个问题,请选择 ysth 的答案。

对于您的辅助问题:

是否可以同时将来自 collectstats 的标准输出通过管道传输到另一个脚本中?

查找pee与 tee 平行的命令,但使用进程(因此是p)而不是文件。(请注意:“小便命令”不是一个好的 Google 搜索词,但我指向的 URL 是一个 SO 答案,其中包含有关它的更多信息以及指向您可以找到代码的位置的直接链接等。)

于 2013-01-17T22:31:53.320 回答