2014-02-25 22 views
0

我一直在解決這個問題大約一個星期,我無處可去,所以我想伸出一些幫助。在Ubuntu上自動執行後臺Perl執行

我有通過命令執行等,通常在

nohup ./script.pl --param arg --param2 arg2 & 

I的方式通常具有這些約10運行同時處理相同類型的不同來源的數據的一個perl腳本(即通過參數指定)。腳本工作正常,我可以在nohup.out中看到所有日誌,並通過ps輸出監視狀態。該腳本還使用sql數據庫來跟蹤各種任務的狀態,因此我可以跟蹤某些源的完成情況。

但是,這是工作太多,所以我寫了一個包裝腳本來自動執行腳本,這是我在哪裏遇到了問題。我想要的東西和我的完全一樣,但是是自動的。

getwork.pl腳本運行ps並分析輸出以找出有多少其他進程正在運行,如果它低於配置的閾值,它將查詢數據庫以獲取最新的源並啓動腳本。

的問題是拉開序幕作業運行不正常,有時他們終止沒有任何錯誤消息,有時他們只是掛和閒置,直到我殺了他們。

網絡腳本通過sql concatanation查詢sql並獲取整個執行命令,所以在sql查詢中,我正在做類似CONCAT('nohup ./script.pl --arg',param1,'--arg2' ,param2,'&')來獲取命令字符串。

我用盡了一切辦法讓這些拉開序幕,我一直在使用系統()嘗試過,但再次,一些工作揭開序幕,有的沒有,有時卡住,有時作業啓動,然後內死亡分鐘。如果我採用了我用來開始工作的確切命令並在bash中運行它,它可以正常工作。

我試圖也用管道命令狀

open my $ca, "| $command" or die ($!); 
print $ca $command; 
close $ca; 

該工程只是以及一切我已經試過。以前每30分鐘通過cron執行的網絡腳本,但是由於我需要另外一個shell包裝腳本,所以我放棄了這個腳本,所以現在get work腳本中每隔30分鐘執行一次函數就會有一個無限的外觀。

我也試着執行命令的諸多變化,包括輸出重定向到不同的文件,等等......似乎沒有什麼是一致的。任何幫助將不勝感激,因爲我真的堅持在這裏......

編輯: 另外,我試圖在每個腳本中添加單獨的日誌記錄,它會啓動一個新的日誌文件與它的PID($ $)。這裏也有一些奇怪的地方,所有的日誌文件都會被創建,但是其中一些進程會運行並寫入文件,其他的只會有一個空文本文件,而有些則只有一個或兩個日誌條目。有時候這個過程仍然在運行,只是沒有做任何事情,有時候它會在日誌裏沒有任何東西。我直接在shell中運行命令總是可以工作的。

在此先感謝

回答