Cron是一個Unix/Linux實用程式,通常用於在後臺執行的Web伺服器上安排命令或指令碼。Cron作業是任務本身,它用於在定期的固定時間、日期或間隔安排任務。通常,這些涉及重複的任務,這些任務是自動化的以節省時間。在WordPress中,這是由WP-Cron處理的,它用於模擬系統cron。
WordPress的cron作業的一些示例可能涉及安排要釋出的文章或按預定義的時間表執行的備份外掛。今天我們將深入探討如何輕鬆建立、修改和執行WordPress的cron定時作業。
什麼是WordPress Cron Job?
WordPress 有自己的 cron 系統,用於安排任務,如檢查更新、安排釋出文章和刪除垃圾箱中的評論。所有 cron 作業都由 WP-Cron 處理。
雖然 WP-Cron 的名稱(和主要思想)來自 UNIX cron,但 WordPress cron 並不這樣工作,而是使用時間間隔來進行任務排程。WordPress 提供的預設時間間隔為每小時、每天兩次、每天和每週。在這裡,基於時間的任務取決於使用者是否訪問您的網站,也就是說,只有當使用者訪問您的網站時,WordPress cron 才會執行任務。
換句話說,WordPress cron 會在頁面載入時執行。有時這並不那麼可靠,這就是為什麼許多使用者更喜歡伺服器級的 cron 作業而不是 WP-Cron 作業。
使用WordPress Cron的好處
如果您想使網站流程自動化,或者需要定期檢查、驗證和控制網站流程,那麼 cron 作業就會派上用場。例如,我們可能希望每天 ping 一次伺服器,每小時檢查一次系統狀態(並將其記錄到資料庫中),等等。
WP Cron 可以讓 WordPress 核心和其他外掛輕鬆執行基於時間的任務。相對而言,設定 WordPress Cron 作業要比使用需要 Linux 命令知識的真正 cron 作業簡單得多。
此外,由於 WP-Cron 使用時間間隔來安排任務,因此您可以放心,即使預定時間已過,您的任務最終也會執行,而不像真正的 cron 會指定任務執行的確切時間。如果時間已過而任務未能執行,那麼它將不會再次執行,直到你手動重新安排它。
如何管理WordPress Cron作業
設定和管理 WordPress cron 作業的方法有很多,但我將向您介紹兩種常用的方法。
第一種方法是使用像 WP Crontrol 這樣的 cron 管理外掛,它允許您直接從 WP 儀表板新增、修改和管理 WordPress cron 作業。您還可以建立 cron 作業、構建鉤子和函式,併為任務定義自定義時間間隔。
第二種方法是使用 WordPress CLI。
如何使用外掛管理WordPress Cron作業
我將使用 WP Crontrol 外掛,它允許您檢視和控制 WordPress 應用程式的 WordPress cron。它是處理 WP cron 作業的流行外掛,擁有超過 200,000+ 個活躍安裝。
WordPress外掛-WP Control
這個外掛超級好用。顯示應該執行哪些CRON作業,這是瞭解正在發生的事情以及它是否有效的很好的第一步。此外,您可以建立新的cron作業並觸發現有的執行。— Josh,Caldera Forms的建立者
您可以從WordPress外掛庫下載它,也可以在WordPress儀表盤中的“安裝外掛”外掛下搜尋它。WP Control的功能包括:
- 能夠檢視所有cron事件及其引數、重複和下次執行時間。
- 編輯、刪除並立即執行任何cron事件。
- 新增新的cron事件。
- 新增、編輯和刪除自定義cron計劃。
要安排WP-Cron事件,您必須建立自定義鉤子。我們建議您檢視官方WordPress外掛手冊,其中有關於安排WP Cron事件的驚人指南。如果您正在尋找使用WordPress設定系統cron的替代方法,我們建議您檢視Tom Mcfarlin關於定義WordPress cron作業的文章。對於那些可能不那麼先進的人,我們將探索如何輕鬆使用 WP-Cron以及流行的免費WP Crontrol外掛。這使您可以檢視和控制WP-Cron系統中發生的事情。
WP-Cron 不會持續執行。預設情況下,wp-cron.php 會在每次頁面載入時啟動,這在大流量網站上可能會造成問題。如果一個網站沒有足夠的 PHP Worker,有時會有請求進來,WordPress 會生成 cron,但 cron 必須等待 Worker,所以就停在那裡。
這是管理 WordPress cron 作業最簡單的方法,你可以快速檢視、編輯、建立、刪除 WordPress cron 事件,並做更多事情。
Step 1:安裝WP Control外掛
與其他外掛一樣,您需要從外掛庫中安裝 WP Crontrol 並啟用它。
安裝完成後,你會發現“工具”選項卡中出現了一個新選項 “Cron Events”。
Step 2:檢視並瞭解Cron事件
接下來,您需要點選 Cron Events,檢視在 WordPress 應用程式上執行的 cron 事件列表。
許多動作名稱很容易識別,因為它們應該與外掛名稱的一部分相匹配,例如“woocoomerce_cleanup_sessions”或“gravityforms_cron”。
您可以在此部分執行、編輯和刪除 cron 事件。將滑鼠懸停在任何 cron 事件上時,都會看到該選項。
您只需單擊操作名稱旁邊的“立即執行”即可立即執行Cron事件。這在排除故障時會很有幫助,因為您可能需要多次執行Cron事件。
成功執行cron事件
你還可以找到關於這些 cron 作業的有用資訊,並快速識別哪個 cron 作業用於什麼目的等。
- 在第一列中,鉤子顯示了 WordPress 核心或任何外掛使用的鉤子名稱。例如,字首“wp”簡單地表示它是 WordPress 核心的 cron。
- 你還會注意到,沒有刪除這些 cron 事件的選項,不過你可以使用編輯和立即執行選項。同樣,對於你的外掛,你會發現使用了其他字首(例如,對於 WooCommerce,使用了“wc”或“woocommerce”)。
- 第二列“Arguments”包含傳遞給鉤子函式的引數。
- 第三列顯示 cron 作業下次執行的時間。
- 第四列(Action)顯示 cron 將執行的動作(cron 作業的“函式”)。
- 最後一列定義了 cron 作業的重複時間。這是計劃任務的時間間隔。
Step 3:編輯Cron事件
現在讓我們編輯一個 WP cron 作業來測試這個外掛。
- 轉到鉤子的名稱並點選 Edit。
- 這時會彈出一個新的部分“Edit Cron Event”,你會看到不同的欄位(您可以更改操作名稱、引數、下一次執行和計劃的重複。請注意這一點,因為許多外掛依賴於它們的Cron作業才能正常執行。)。在我的例子中,我編輯了“wp_privacy_delete_old_export_files”鉤子。
- 接下來,我要將此 cron 作業的重複性改為 “Once Hourly (hourly)”。
Step 4:新增自定義時間間隔
接下來,我將教你如何為 cron 事件新增自定義時間間隔。
- 進入 WordPress 設定 → Cron 計劃。
- 現在,點選“Cron Schedule”選項卡,就會出現一個新介面,在這裡你可以看到計劃時間間隔的詳細資訊。
- 填寫“內部名稱”、“間隔秒數”和 “顯示名稱”,然後點選 “Add Cron Schedule”。
- 請注意,輸入的時間間隔單位是秒。我將使用 600 秒將時間間隔設定為 10 分鐘。
- 現在,您可以編輯 cron 事件並將其替換為自定義時間間隔。
Step 5:新增新的cron事件
現在你知道如何管理 cron 事件的簡單任務了,但如果你想為 WordPress 應用程式新增自己的 cron 作業怎麼辦?別擔心,這非常簡單,您必須按照以下說明操作。
- 首先,點選新增 cron 事件,然後進入新增 cron 部分。
- 然後,給出一個鉤子名稱(應遵循正常的 PHP 命名規則,不能有空格)。
- 然後,新增引數(這是可選的);在我的例子中,引數是空白的。
- 接下來,選擇任意選項,並在“Next Run”欄位中填入時間。
- 最後,為新 cron 選擇一個重複時間(計劃時間),然後點選新增事件。
- 如果對此有任何疑問,可以從 cron 事件中檢查任何正在執行的 cron 作業設定。
- 新增新的 cron 作業後,進入 cron 事件選項卡,檢查新建立的 cron。你會發現,操作欄將顯示 None(錯誤)。這是因為您還沒有為該 cron 作業定義任何操作。
- 因此,您需要在主題的 functions.php 檔案中編寫幾行程式碼並新增一個動作。
注意:在進一步操作之前,強烈建議備份 WordPress 網站。
- 進入WordPress 控制面板 → 外觀,然後點選主題檔案編輯器。
- 從頁面右側的主題檔案選項中點選 function.php 檔案。
- 在主題的 function.php 檔案中
<?php
後新增以下程式碼行add_action( 'wbolt_new_cron', 'cw_function' );function cw_function() {wp_mail( 'admin@wbolt.com', 'Wbolt Cron', 'Wbolt - Developed on WordPress!' );}add_action( 'wbolt_new_cron', 'cw_function' ); function cw_function() { wp_mail( 'admin@wbolt.com', 'Wbolt Cron', 'Wbolt - Developed on WordPress!' ); }add_action( 'wbolt_new_cron', 'cw_function' ); function cw_function() { wp_mail( 'admin@wbolt.com', 'Wbolt Cron', 'Wbolt - Developed on WordPress!' ); }
注意: 確保鉤子名稱前後一致,及將電子郵件地址換成你自己的。
你可以在上圖中看到,我是直接用 WordPress 的儀表盤編輯的。如果你願意,也可以通過 FileZilla 等 FTP 客戶端編輯該檔案。
接下來,檢查電子郵件收件箱,看看我們是否收到了郵件。
完成了,我們成功新增了一個新的 cron 事件。
另外一個示例中,我們將為Disqus外掛新增WordPress Cron作業。許多人可能想要這樣做來改變同步頻率,或者如果他們在評論來回同步時遇到問題。每個第三方外掛開發人員的文件都應該有他們的cron事件的名稱,或者更確切地說是操作名稱。在這種情況下,外掛使用的是“ dsq_sync_forum ”。
如果您是從頭開始建立一個,您將需要在程式碼中的某處有一個相應的動作鉤子,例如您的functions.php檔案。這是WP-Crontrol給出的示例:
add_action( 'my_hookname', 'my_function' );
下一步是編寫您的函式。
function my_function() { wp_mail( 'hello@example.com', 'WP Crontrol', 'WP Crontrol rocks!' ); }
對於Disqus,我們首先新增一個新的600秒(10 分鐘)的cron計劃。然後我們點選“Add Cron Event”並輸入“dsq_sync_forum”作為我們的動作名稱,選擇下一次執行時間,並選擇我們剛剛建立的10分鐘重複。然後我們點選“Add Cron Event”。這將每10分鐘自動執行一次,以便我們手動將Disqus評論同步回我們的WordPress資料庫。
新增WordPress Cron作業
如何使用WP CLI管理WordPress Cron作業
您還可以通過 WordPress CLI 檢視和管理所有 WordPress cron 作業。例如,以下命令將為您提供當前的cron事件列表。
wp cron event list
有關其他命令和引數,請參閱官方WP-CLI cron文件。
要通過 WP CLI 管理 Cron 作業,可以參考以下步驟:
- 您可以使用 PuTTy 登入伺服器。輸入伺服器的 IP 地址,然後點選開啟。
- 在 PuTTy 中輸入伺服器管理面板的伺服器使用者名稱和密碼。
- 接下來,輸入 WordPress 應用程式的路徑。在我的例子中,URL 是:
cd applications/urrghmpqks/public_html/
- 接下來,您需要執行這條命令:
wp cron event list
- 您可以看到鉤子名稱、下一次執行時間、下一次相對執行時間和重現時間(計劃時間)。
如何設定伺服器Cron Job
現在,您已經知道什麼是 WordPress cron 作業以及它是如何工作的了。如果你想在流量低、需要在特定時間執行的重要任務、過度的 DDoS 攻擊或頁面載入時間長的情況下用伺服器級別的 cron 作業來代替它,該怎麼辦呢?
注:需要注意的是,WP-Cron與系統cron略有不同,它們各有優缺點。例如,WP-Cron完全依賴於時間間隔,而系統cron依賴於特定時間。WP-Cron也僅在頁面載入時(後端或前端)有效,這可能不太可靠。WordPress提供的預設時間間隔是每小時、每天兩次和每天。
Step 1:開啟並編輯wp-config.php檔案
首先,你需要使用 FTP 客戶端(如 FileZilla)或 SSH 客戶端(如 PuTTY)開啟 wp-config 檔案。然後,編輯該檔案,將下面一行程式碼放在/* That’s all. Stop editing! Happy blogging. */的前面。
define('DISABLE_WP_CRON', true);
這段程式碼禁用了 WordPress 網站上正在執行的 cron 事件(即禁用了WP-Cron),現在你可以建立一個伺服器層級的 cron 作業了。
Step 2:為伺服器新增新的Cron Job
可以按照以下步驟操作:
- 登入寶塔面板,先使用你的瀏覽器訪問寶塔面板的管理地址,輸入賬號密碼登入。
- 進入計劃任務管理介面,在寶塔面板首頁,找到左側選單中的“計劃任務”或“定時任務”選項,點選進入任務管理頁面。
- 新增新的計劃任務,點選“新增任務”按鈕,選擇“Shell 指令碼”或“命令命令”型別的任務。
- 填寫任務內容,在任務內容中輸入如下命令:
wget -q -O - 'https://wordpress-413270-1299955.cloudwaysapps.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1wget -q -O - 'https://wordpress-413270-1299955.cloudwaysapps.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1
wget -q -O - 'https://wordpress-413270-1299955.cloudwaysapps.com/wp-cron.php?doing_wp_cron' >/dev/null 2>&1
在上述命令中,我首先為 cron 作業定義了五分鐘的時間間隔。你可以使用本網站檢查時間計劃表示式。在我的例子中, */5 * * * *
就是時間間隔表示式。
就這樣!你已經成功新增了一個伺服器 cron 作業。
如何檢視和控制WordPress Cron作業
要優化 WordPress 網站的效能,必須有效地檢視和控制 cron 事件。請按照以下步驟使用 WP Crontrol 外掛:
安裝和啟用:
首先在 WordPress 網站上安裝並啟用 WP Crontrol 外掛。
訪問 Cron Events:
啟用後,導航至 “工具” – “Cron Events” 頁面檢視和控制 cron 設定。
檢視 Cron 事件:
- 該頁面會顯示網站上所有計劃的 cron 事件列表,並以鉤子名稱標識。
- 鉤子名稱通常可以讓人瞭解每個事件的目的。
- 資訊包括下一次計劃執行時間和兩次事件之間的時間間隔。
控制 Cron 事件:
- 在列表中,在某些外掛下,你會看到編輯 | 立即執行 | 暫停此鉤子 | 刪除等選項。
- 注意: 處理 cron 事件時要小心,尤其是 WordPress 的預設事件。
處理資源密集型事件:
- 如果外掛建立了資源密集型 cron 事件,首先檢查外掛設定中的控制選項。
- 如果沒有,請點選 cron 事件旁邊的 “編輯 ”連結進行進一步調整。在本例中,我將調整 breeze_purge_cache 外掛的設定。
修改 Cron 設定:
- 單擊“編輯”開啟“Modify Cron Event”選項卡,您可以在此更改事件的頻率。
- 修改完成後,單擊“Update Event”儲存設定。
小結
希望本文能幫助您瞭解 WordPress cron 作業的工作原理。我討論了管理 WordPress cron 作業的兩種方法:一種是通過外掛,另一種是通過 WP-CLI。我還討論了在WordPress 實時伺服器上設定一個真正的 cron 作業。如果您有任何問題,請在下面的評論區告訴我。
評論留言