2017-04-12 27 views
0

我正在開發CakePHP項目。如何從控制器執行shell命令

我有一些任務在後臺執行,可能需要很長時間才能完成。所以我用cakephp-queue插件(感謝dev)。

現在我提出我的所有任務在外殼和每次用戶點擊一個按鈕,一個新的作業從控制器使用此功能

$job = $this->QueuedJobs->createJob('Scan', [ 
    'server_id' => $id, 
    'user' => $this->Auth->user('id'), 
]); 

這是工作的罰款創建。但是爲了執行任務,我需要從終端運行命令

bin/cake queue runworker 

當項目正式運行和部署時,這是不可能的。那麼,如何在創建作業後從控制器內執行此命令?

回答

2

你還沒有理解任務是如何工作的。整點是而不是有一個控制器等待的東西,也沒有從web上下文運行一個shell。

再次閱讀文檔:https://github.com/dereuromark/cakephp-queue/tree/master/docs#setting-up-the-trigger-cronjob你應該創建一個cron工作。

*/10 * * * * CD /全/路徑/到/應用& &斌/蛋糕隊列runworker -q

確保您使用crontab -e -u www數據進行設置如www數據用戶,而不是root等

這將啓動一個新的工人每10分鐘。如果將一名工人的最長使用時間設置爲15分鐘,那麼兩名工人同時工作時會產生小的重疊。如果您降低10分鐘並延長使用壽命,您會獲得不少重疊的工作人員,從而獲得更「平行」的處理能力。玩它,但只是不要射過頂部。

它將接收任務並更新任務的狀態。

+0

謝謝。我多次瀏覽文檔,但無法完全確定。我以前從未使用cron作業。現在對我來說很清楚。再次感謝。 –