2013-01-17 24 views
2

我們有許多通過相當大的網絡收集各種統計數據的cron作業。這些cron工作中的大部分都沒有得到很好的監控。我想寫一個Perl腳本,我們可以管這些作業的輸出入,這樣的事情:Perl,確定STDIN來自哪裏

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

的想法是,從collectstats.pl標準輸出被丟棄和標準錯誤管道送入scriptwatcher.pl。然後,第二個腳本可以在出現錯誤時採取適當的措施,最有可能給我發電子郵件。通過快速測試,除了在scriptwatcher中,我需要知道發送錯誤的腳本的名稱。只要那一小塊信息,我想要做的一切就成爲可能。

此外,是否有可能從同一時間管道從collectstats到另一個腳本的標準輸出?即一個腳本2管道?

乾杯

+1

使用該行:'5 * * * * collectstats.pl 2>&1 1>/dev/null | scriptwatcher.pl collectstats.pl'。也就是說,告訴腳本觀察者它正在觀看哪個腳本。查看['pee'](http://stackoverflow.com/questions/4656927/is-it-possible-to-distribute-stdin-over-parallel-processes/4658717#4658717)命令,平行於'tee'但與進程(因此'p'),而不是文件。 –

+0

@JonathanLeffler如果可能,我想避免重複鍵入collectstats.pl。如果沒有別的可能,那麼這是我需要做的,但避免它是可取的。 – MikeKulls

+2

哈哈,嘗試在谷歌中輸入「pee命令」,而不是我所期望的! – MikeKulls

回答

1

使用行:

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

也就是說,告訴它是看哪個劇本劇本守望者。

此外,作爲ysth表明他answer,有scriptwatcher運行它應該看,像nohupsu等可以爲你運行其他命令的腳本。這可避免您必須爲腳本命名兩次。如果重複是一個問題,請選擇ysth的答案。

爲了您的若干輔助問題:

,纔有可能從管的collectstats標準輸出到另一個腳本在同一時間?

查找pee命令,平行於發球但與進程(因此p)而不是文件。 (注意:'pee命令'不是一個好的谷歌搜索術語,但是我指向的URL是關於它的更多信息的SO回答以及直接鏈接到可以找到代碼的位置等等)。

4

扭轉它,做:

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

,有你的scriptwatcher.pl處理重定向和運行其args中給出了該腳本。

+0

感謝ysth,我可以看到這個問題,但是,如果scriptwatcher因任何原因失敗,那麼所有的cron作業停止工作。這非常糟糕,尤其是因爲這會是我的錯。然而,如果這是另一種方式,即使scriptwatcher失敗,collectstats仍然會運行。 – MikeKulls

+1

對於scriptwatcher管道也是如此。實際上,我認爲運行其他作業的scriptwatcher稍微安全一些,如果你有執行將stderr寫入臨時文件而不是管道的作業。 – ysth