簡體   English   中英

在mod_perl下與Perl一起拖尾“工作”

[英]Tailing 'Jobs' with Perl under mod_perl

我已經在mod_perl下運行了這個項目,該項目在主機上顯示了一些信息。 在此頁面上是帶有下拉菜單的文本框,允許用戶ping / nslookup / traceroute主機。 輸出在文本框中顯示為tail -f

在CGI下效果很好。 當用戶請求ping時,它將對服務器進行AJAX調用,在服務器上,它實際上將開始ping,並將輸出發送到臨時文件。 然后,隨后的ajax調用將“尾部”文件,以便更新輸出,直到執行ping操作為止。 作業完成后,臨時文件將被刪除。

但是,在mod_perl下,無論我做什么我都可以阻止它創建僵屍進程。 我已經嘗試了一切,使用IPC::Run等進行了兩次分叉。最后,在mod_perl下不鼓勵系統調用。

所以我的問題是,也許有更好的方法可以做到這一點? 是否有CPAN模塊可用於創建命令行作業和尾隨輸出,這些輸出將在mod_perl下工作? 我只是在尋找一些建議。

我知道我可能會創建某種“作業”守護程序,該信號通知我詳細信息並從中獲取更新。 它會運行命令並跟蹤其狀態等。但是有沒有更簡單的方法?

提前致謝。

我在這方面的時間很短,並且對CPAN沒有運氣,所以我將在這里提供解決方案(我可能是重新發明了輪子)。 我必須馬上做些事情。

在此示例中,我將使用ping。

當用戶請求ping時,AJAX腳本會在數據庫中創建一條記錄,其中包含ping的詳細信息(主機,間隔,計數等)。 該記錄具有一個自動遞增的ID字段。 然后,它將SIGHUP發送到作業守護程序,該守護程序只是守護程序的perl腳本。

該作業守護程序接收SIGHUP,在數據庫中查找新作業並處理每個作業。 獲取新作業時,它將進行分叉,將PID和“運行中”狀態寫入數據庫記錄,根據唯一的作業ID打開stdout / stderr文件,並使用IPC::Run將STDOUT / STDERR定向到這些文件。

作業守護程序會跟蹤派生的作業,如果運行時間過長則將其殺死。

為了尾隨輸出,AJAX腳本將作業ID發送回瀏覽器。 然后在Javascript計時器上,將調用AJAX腳本,該腳本基本上通過數據庫記錄檢查作業的狀態並尾隨文件。

ping完成后,作業守護程序會將記錄狀態設置為“完成”。 AJAX腳本在常規狀態檢查中對此進行檢查。

我這樣做的原因之一是AJAX腳本和作業守護程序通過經過身份驗證的方式(數據庫)進行對話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM