2014-05-23 55 views
1

我正在運行Tomcat 6.0服務器上的一個perl腳本通過Windows 2008 R2從存儲庫中拉出。該腳本變得非常緩慢,因爲它必須等待git pull完成。這爲Github webhook創建了一個服務超時,它實際上觸發了腳本。除了下面的代碼外,代碼中沒有任何內容。Perl腳本緩慢通過湯姆貓6.0並生成服務超時

exec("C:\\Git\\bin\\git.exe pull") ; 

如何改進腳本以便webhook開始工作。以下是我在github webhook上得到的錯誤。當我運行的瀏覽器,它需要大約50歲到超過1分鐘的腳本服務超時

我們不能提供這種有效載荷。湯姆貓可能超負荷了?

----使用fork後更新----- 我用下面的代碼通過fork來實現它。它在本地工作(當在命令行上執行時),但是當我通過web服務器運行時,我得到一個積極的信號給webhook,但沒有提交更改,這意味着server_script沒有運行。

$pid = fork(); 
if($pid == 0){ 
    exec("perl server_script.pl"); 
    print "This is child process\n"; 
    print "Child process is existing\n"; 
    exit 0; 
} 
print "This is parent process and child ID is $pid\n"; 
print "Parent process is existing\n"; 
exit 0; 

回答

0

應該可以去耦兩個操作:

  • 聽網絡掛接有效載荷
  • 啓動git pull

第一個聽衆應該簡單地提出一個標誌(如例如觸摸文件),以便發信號通知webhook的接收。

第二個進程應該監視該標誌,並且如果所述標誌被提出,則啓動git pull

通過解耦這兩個操作,通過使它們異步,您可以始終完成webhook。

+0

我試着做叉子。腳本在本地運行良好,但是當從網絡服務器運行時,我仍然沒有通過git pull看到更新。我製作了兩個腳本,一個腳本簡單地分叉並運行另一個腳本並退出。這提高了webhook的信號能力,但不知怎的,我沒有看到第二個腳本沒有運行的變化。 –

+0

@ZahidIrfan是的,我在想一些比叉子更不高雅的東西。管理/監視共享資源時允許兩個處理器獨立生活的東西。 – VonC