我一直在解決這個問題大約一個星期,我無處可去,所以我想伸出一些幫助。在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中運行命令總是可以工作的。
在此先感謝
謝謝,我會研究它。這裏的根本問題是使用perl在後臺執行進程。 – user2630270