2013-04-22 33 views
0

我正在使用AWS亞馬遜網絡服務,並且我有4個相同的Web服務器。我有一個cron作業設置發送電子郵件,只需要從一臺服務器上運行,但只存在於所有4上。從所有具有相同作業的4臺相同Web服務器中的1臺運行Cron作業

這些Web服務器上的所有內容都是相同的,適合我,但目前所有的Cron作業都運行。尋找如何在所有4臺服務器上完成工作,但只能在一臺服務器上運行的解決方案。

我確實有一個數據庫,並認爲使用tmp表格首​​先在該表中寫入/註冊自己將是唯一一個運行(其他人會讀取此數據,然後不會執行過此點)。但是我擔心,因爲它們都使用相同的系統時鐘,因此可能會同時讀取表格,即使有人寫入,其他人也會認爲他們也有權訪問。

會使用表格能夠限制4個Web服務器只有1 contined或將相同的時鐘因素阻礙?

注意:服務器名稱可能會隨時間而改變,因爲它們更像資源,然後是永久系統。 (例如:可以在需要時旋轉新的)...

有沒有更好的方法來做到這一點?注意:我不想要一個不同的服務器,我希望它們全都相同。

三江源

回答

2

對於我來說,我會做:

1 - create a lock for each of the server 
2 - define a list of server like ['1'=>'server ip', '2'=>'server ip',...] 
3 - pass in server id in cron job as args 
4 - modify the script if (lock not exists) do run then create a lock for this server, delete the lock for next server. 
5 - delete the lock for the first server to start with. 
1

機器將各有不同的主機名,所以你可以用它來只有所需的機器上執行作業。例如,如果機器「SERVER01」,「Server02上」等,然後在PHP中,你可以做:

if (gethostname() === 'server01') { 
    // do the task 
} 

另一種方法是,而不必對所有服務器的單個服務器映像,有兩個略有不同的圖像,一個用於「主要」服務器(具有cron任務等),另一個用於所有其他(「次要」)服務器。

+0

服務器名稱是不是永久性的,但公平的呼叫。 2張圖片是可能的 - 寧願讓他們保持一致的方式,但再次公平地致電:)謝謝 – Adam 2013-04-22 06:56:10

相關問題