2012-07-04 93 views
2

是否可以使用PHP安排任務?比如,我想用jQuery datepicker選擇一個日期,並提交它。如果該日期等於今天的日期,則會發送一封電子郵件作爲示例(或任何其他PHP腳本)。日期會根據用戶而有所不同,同樣,每個用戶可以有多個計劃任務運行。在沒有cron的情況下在PHP中安排任務

編輯

操作系統是Linux,和網站託管在godaddy.com 此外,它的最終用戶誰將會自行選擇執行這些任務,這樣他們就可以使用該命令行。

編輯

on Rails的或Django的解決方案,任何Ruby歡迎爲好。

+0

順便說一句,爲什麼它被標記爲ruby-on-rails和django? –

+0

哦該死的,我以爲我已經說過,歡迎任何RoR或Django解決方案!現在編輯。 –

回答

1

如果您使用的是Unix服務器,請嘗試at

http://www.manpagez.com/man/1/at/

它的工作原理類似的方式與cron,因爲它是由PHP完全獨立的,你需要了shell_exec()的外部命令。但是,它有一個簡單的命令行界面。像cron作業一樣,at作業能夠在重新啓動後生存下來。

如果您使用at您必須編寫一個單獨的腳本來執行您想要安排的任務。

例子:

shell_exec("echo 'php script.php' | at -t 201208011234.56"); 

將在12:34:56 8月1日運行script.php的,2012。

0

您可以通過在主索引頁面或標準包含文件中添加支票而無需cron來完成此操作 - 但這僅適用於您無法訪問cron(例如共享主機)的情況。在這個檢查你搶優秀的操作的列表,並執行它們,可能通過使用

if (time_since_last_run > 5*60) // minutes 
    shell_exec("/usr/bin/php /var/www/check-tasks.php &"); 

最好的解決辦法是使用cron來啓動一個PHP腳本,將您的系統內檢查計劃項目,並執行它們。你可以通過wget或直接通過調用PHP來完成。

我擁有的一個共享託管網站是從我的另一臺服務器通過cron和wget http://othersite.example.com在外部安排的。

例如crontab條目:

0 * * * * wget -O - -q -t 1 http://othersite.example.com/cron.php 
1

你需要一些過程,在服務器端在預定的時間運行任務。

一種流行的方法是將任務信息存儲在某個數據庫中,並有一個定時檢查任務隊列的cron作業 - 這是非常可靠和安全的。

如果沒有更多關於它將部署的環境的信息,就不可能提供更好的答案。例如:

  • 目標OS
  • 託管型(專用,共享,雲)
  • 你有管理員權限?
  • 它暴露在互聯網?

最有可能你將不能夠這樣做,在一個共享的託管環境,無論如何,但我必須說,有一個網站叫了shell_exec不是從安全角度來看非常明智的,所以我會避免,如果網站暴露於互聯網。

好的託管服務提供商應該有一些可用的後臺任務調度程序,即使它不是crontab。如果你的主機提供商沒有,試圖拉出一些特技填補空白可能是一個壞主意。

[更新]

正如我在原崗位的編輯部分說過的,我就收留了它godaddy.com,我不能讓客戶端上運行這些命令行等的還有其他語言的解決方案嗎?

我沒有在godaddy託管,但他們曾經在他們的控制面板上有一個「Cron經理」。我認爲正確的goDaddy cron設置是

/usr/bin/wget -O - -q "http://yoursite.com/cron.php" > /dev/null 2>&1 

在Cron Manager的命令選項中。這個「cron.php」將檢查任務隊列以查看是否有任何電子郵件要發送(任務隊列是數據庫中的簡單表格,您可以記錄客戶安排的任何任務)。

+0

正如我在原始文章的編輯部分所說,我將它託管在godaddy.com上,並且我不能讓客戶端運行這些命令行等。是否也有其他語言的解決方案? –

相關問題