2010-09-30 109 views
0

我有10個用戶。我想爲這10個用戶設置一個cron。現在,當一個特定的用戶登錄時,他可以從他的面板設置玉米時間,並且cron將在那個時間運行。當新用戶添加一個新的cron時,將根據應用使用默認時間爲該用戶設置。如何通過php腳本設置cron?

我該如何做到這一點?

+0

我不認爲我明白你想描述什麼。 「他的小組」是什麼意思?這是Web應用程序或桌面的一部分嗎?當你說「當新用戶添加一個新的cron將被設置」時,你的意思是用戶通過cron在命令行上還是通過web界面添加? – thomasmalt 2010-09-30 11:35:24

+0

我想從web界面添加cron和他的面板意味着比當用戶登錄他可以編輯cron執行時間,就像我們更新我們的任何網站的配置文件 – user423911 2010-09-30 11:48:10

回答

0

這聽起來像一般一個非常不明智的事情,但如果你知道你在做什麼,瞭解所涉及等安全問題,我建議解決這個使用兩個腳本

  • 一個PHP的一部分讓用戶查看他的crontab並使用html表單處理時間設置,並將所需的更改存儲在系統的已知位置。
  • 一個shell腳本部分在系統上作爲受信任的用戶運行,並以給定的時間間隔(每分鐘一次)獲取更改並對cron執行實際更新。

向cron添加東西可能是一件非常危險的事情,只有非常值得信賴的用戶才能被允許這樣做。任何網絡解決方案都應該被視爲不安全,您應該格外小心,以確保任何輸入都經過了適當的審覈。

+0

好,但不是解決方案 – phirschybar 2010-09-30 11:38:52

+0

我不明白爲什麼你覺得有必要投票。 – thomasmalt 2010-09-30 11:40:27

+0

@phirschybar另外你的建議是**幾乎完全**同樣的想法我建議,只有你使用數據庫來存儲更改,但我建議「系統上的某個地方」,這可能是一個數據庫,或者一個文件或其他的東西,並且在輸入被正確地審查之後實際更新每個用戶的crontab。 – thomasmalt 2010-09-30 11:43:42

2

我同意thomasmalt,它不是明智的,但你應該做的,而不是你應該做的,所以你的用戶可以設置一個'用戶'數據庫表(如MySQL)與列cron時間:'間隔(INT)'和'last_update(DATETIME)'。所以每個用戶都有自己的時間設置。然後你決定什麼是你允許的最小增量(比如1分鐘),只讓你的用戶設置比這更高的時間。

然後你運行一個cron每1分鐘檢查'用戶'表。查找間隔小於或等於'last_update'以來的時間的用戶。然後針對這些用戶運行您的操作。這有效地爲每個用戶設置cron。

+0

請詳細描述一下您是否有一些代碼或演示 – user423911 2010-09-30 11:50:24

+0

+1 @phirschybar好的解決方案。 – 2010-09-30 12:37:17

+0

我沒有任何適用於此的代碼,因爲我不知道應用程序的具體情況。這只是讓用戶在系統上創建cron作業的理論選擇。 – phirschybar 2010-10-03 14:28:26

0

正如thomasmalt所說,這在公共系統中可能不明智......您不希望讓用戶弄亂系統cron。

我建議你讓用戶在他們的控制面板中指定一天的時間,並讓cron腳本每分鐘運行一次。在該腳本中,很容易獲取匹配當前時間的用戶並執行其腳本。它實現了同樣的事情,稍微更冗長,更多的代碼,但更安全。