2010-02-25 57 views
0

我有一個cron作業設置,將啓動我的腳本。Cron查殺產生的進程

該腳本的目的是殺死當前正在運行的進程,並啓動此進程的新版本(CHECKDB)。 CHECKDB需要一直運行,所以我們有一個start_checkdb腳本,它基本上是一個運行CHECKDB的無限循環;如果它崩潰,它停留在循環中,再次啓動它。 [是的,我意識到這不是最佳做法,但這不是什麼]

我的腳本將由cron調用沒有問題,然後它將殺死CHECKDB沒有問題。據我所知,被調用的子腳本會啓動CHECKDB備份,但每次在cron運行後檢查ps時,該進程都不會運行。如果我在命令行上手動運行腳本,在任何shell下運行都沒有問題:殺死CHECKDB和start_checkdb,啓動啓動CHECKDB的start_checkdb。

然而,由於某些原因,當cron做到這一點時,這個過程永遠不會運行。它會殺死活着的人,並且不會啓動它,或者啓動並殺死它。

有可能當cron到達父進程的末尾時,它會殺死被調用的子進程嗎?

我不知道這是否有差別,但是這是在Solaris 8

回答

0

你可能看使用的nohup你的cron腳本中,啓動時的checkdb。像'nohup命令&'這樣的東西將會是一種正常的方式來啓動你想要在啓動過程之外生活的東西。

+0

嗯,我試圖做到這一點,但它沒有奏效。它在cron運行時終止了進程,並且在手動運行時沒有終止。這是非常令人沮喪的:( – 2010-02-25 19:04:02

+0

Nohup只是屏蔽了掛斷信號,它用來阻止從tty(終端)啓動的程序退出時退出。 – Kenster 2010-02-25 19:34:35

0

您能否澄清您對該安排的描述?聽起來,在正常情況下,start_checkdb和CHECKDB都在運行。 cron作業應該殺死CHECKDB,並且已經運行的start_checkdb副本應該重新啓動它?或者cron作業會殺死這兩個進程,然後重新啓動start_checkdb? cron作業運行後,缺少哪個進程--CHECKDB,start_checkdb或兩者?

說了這麼多,最常見的原因,一個進程的命令行工作,但在cron失敗是:

  • 依賴於正確的命令路徑(或其他一些環境變量)
  • 依賴從正確的目錄運行
  • 依賴於從tty運行。