我正在嘗試創建一個允許我啓動和停止PHP腳本的網頁。該腳本是站點後端的一部分,需要訪問,讀取數據,處理數據以及更新腳本所在服務器上的數據庫。此外,我希望網頁允許管理員查看當前狀態(正在運行或已停止),甚至鏈接到由腳本創建的日誌。 我開始走下去學習PHP的exec,passthru和相關函數的路徑。這是正確的道路嗎?還有其他方法可以做到這一點嗎?是否有可能以平臺不可知的方式做到這一點?我正在開發Windows中的LAMPP + CakePHP堆棧,並希望在我選擇的任何虛擬主機上存在這些功能。從後端管理頁面啓動和停止PHP腳本
回答
我在最近的工作中已經完成了這項工作,但這對您來說可能是矯枉過正。我做了一個作業處理器,它基本上在數據庫中設置了2個表格,最少2個控制器,最少2個控制器。
第一部分是作業處理單元,它由作業處理器控制器組成,它負責管理啓動或繼續作業的請求,並附帶兩個activerow模型JobQueue和Job。你可以刪除這個隊列,但是在這樣的系統中排隊是非常實用的,所以你可以說2,3,4個任務可以一次執行。
這個隊列只是它的一個插槽,它連接了幾個作業,它有一個隊列狀態來確定它是否正在運行。
作業是一個虛擬對象,映射到描述必須完成的作業表。在我的實現中,我創建了一個必須在被調用的控制器中實現的接口和一個字段+數據庫中的一個類型。 Job實例調用控制器類來調用(而不是作業處理器控制器,另一個控制器來管理操作),並調用其中的方法來啓動任務處理。
現在,變得棘手,我強迫我的系統在專用服務器上運行,因爲我不希望任務加載主服務器或堵塞Apache的處理隊列。所以我有兩臺服務器,我的Queue類負責通過一個IP地址調用另一臺服務器上的一個頁面來專門在該服務器上運行作業。作業完成後,它會使用HTTP請求重新啓動處理並執行下一個任務。如果沒有任何工作,那麼它就會正常死亡。
這樣做的好處是它不需要cronjob(只要你的腳本超穩定並且不會崩潰),因爲它在你想要的時候被你觸發,然後你可以放手並用fsockopen調用自己以觸發另一個觸發下一個作業的頁面視圖。
工作單位
明白,如果你的工作是非常大的,你應該分割他們是很重要的。我使用「工作單位」的原則來描述工作必須進行多次的1個部分。那麼隊列處理器成爲了經理的時間也讓他能夠檢測一個工作比X秒花了,它只會推遲後的剩下的步驟並調用自身回來,繼續進行他的。這樣,您不需要「設置時間限制」,並且在30秒的腳本執行時不會阻塞服務器。
我希望這有助於!
感謝您的回答。這聽起來像我正在做的事情的矯枉過正。我只想執行以下操作:每24小時根據某些條件從我的數據庫中選擇一些行數,更新數據庫中每行的字段,然後在24小時內再次重複。我認爲最好的辦法是在服務器上連續運行腳本。最後,我希望能夠使用管理員可訪問的網頁上的兩個按鈕啓動該腳本,另外,我希望網頁顯示腳本的狀態(正在運行/已停止)。 – reggie3
你最好的選擇是依靠具有cron功能的服務器。每個CPANEL像服務器都有CRON命令,它允許您運行CLI腳本或使用一點wget --remove-after URL讓您像腳本一樣調用腳本。你也可以使用外部cron,比如http://webcron.org/在你的網站上觸發一個腳本,我「認爲」它是免費的,我從來沒有用過它們...... –
要運行的持續運行腳本,你需要考慮到:
你的PHP腳本應該由作業調度比如cron或者其他什麼東西被推出,CLI(命令行)。不要忘記,您的Web服務器配置定義了執行腳本的超時。
要每天運行24小時,也許您想象實現無限循環。在這種情況下,您可以編寫一個像jobIsActive這樣的測試,如果應該執行作業,它可以在每個循環中讀入文件或數據庫中。如果你點擊按鈕,只需更改作業狀態(更新文件,db ...)。你的兩個按鈕可以停止治療或激活它,但不會停止無限循環。
無限循環並不是最優雅的解決方案,爲什麼不在cron選項卡中編寫條目以便每晚執行作業,並且單擊按鈕可以手動觸發它。
- 1. 啓動/停止腳本刷新頁面
- 2. 啓動和停止記錄終端輸出從bash腳本
- 3. 自動啓動和停止node.js腳本
- 4. 自動啓動和停止node.js腳本
- 5. Tomcat 7管理器腳本停止/啓動應用程序
- 6. 啓動和停止服務器腳本
- 7. Infinispan啓動和停止腳本
- 8. Bash啓動和停止腳本
- 9. 如何使用其他腳本啓動和停止腳本?
- 10. 如何從選項頁面啓動和停止計時器
- 11. PHP腳本停止
- 12. PHP腳本停止
- 13. 管理多個PHP腳本的啓動和關閉
- 14. PHP-resque:如何暫停和停止從PHP腳本工人
- 15. runit調用腳本與啓動/停止
- 16. Wildfly 10啓動,停止獨立腳本
- 17. python腳本的shell啓動/停止
- 18. bash腳本啓動/停止ffmpeg x11grab
- 19. Jboss 7.1.1啓動/停止腳本
- 20. 從後面的頁眉/頁腳停止背景圖像
- 21. 在Github上託管時腳本停止工作頁面
- 22. 響應後處理頁面停止.writefile
- 23. 如何停止python腳本從終端
- 24. 我的節點管理器在啓動後停止
- 25. mac終端在啓動時運行腳本,如何停止?
- 26. 批處理腳本後停止向其他批處理腳本
- 27. 頁面加載時啓動動畫,加載頁面時停止
- 28. 從cron啓動PHP腳本?
- 29. 腳本自動啓動和停止AWS EC2實例
- 30. -ErrorAction停止後腳本處理不會停止
您想運行一個連續運行的腳本嗎?或者你想避免他的開始?你在標籤列表中提到守護進程是否是這種你想創建的東西? –
我想創建一個可以持續運行的腳本(或者直到我停下來)。我希望能夠通過點擊網站上的網頁上的按鈕來啓動和停止該腳本。我想堅持HTML,PHP和Javascript(如有必要),我想創建一個平臺不可知的解決方案。 – reggie3