<noframes id="bhrfl"><address id="bhrfl"></address>

    <address id="bhrfl"></address>

    <noframes id="bhrfl"><address id="bhrfl"><th id="bhrfl"></th></address>

    <form id="bhrfl"><th id="bhrfl"><progress id="bhrfl"></progress></th></form>

    <em id="bhrfl"><span id="bhrfl"></span></em>

    全部
    常見問題
    產品動態
    精選推薦

    深度討論PHP利用服務器Crontab進行動態設置定時任務~

    管理 管理 編輯 刪除

    概述

    在軟件開發中,定時任務是一個常見的需求,尤其是在需要定期執行某些操作的場景中。傳統的Linux cron服務雖然強大,但它的靈活性確實有限,尤其是在動態調整任務執行時間方面。但在實際項目運行中動態修改任務執行時間,實在不太靈活。

    隨著項目規模的擴大,管理大量的cron任務和它們的配置文件可能會變得復雜且容易出錯。特別是在多環境部署的情況下,維護一致性和同步配置文件需要額外的工作。

    由于cron任務的執行時間和頻率是預定義的,當任務執行出現問題時,調試和跟蹤可能會比較困難。特別是當任務依賴于外部系統或資源時,問題定位和解決會更加復雜。頻繁修改cron配置文件可能會引入安全風險,尤其是在多用戶環境中。不當的權限管理或配置錯誤可能會導致任務被惡意利用或執行不適當的操作。

    Cron Scheduler

    PHP Cron Scheduler 是一個與框架無關的cron作業調度程序,可以輕松地與您的項目集成或作為獨立的命令調度程序運行。在使用這個任務調度器時,你只需要在你的服務器上創建單個 scheduler.php 入口。你的任務調度在scheduler.php方法中進行定義。

    安裝

    composer require peppeocchi/php-cron-scheduler

    開源地址:https://github.com/peppeocchi/php-cron-scheduler

    如何工作

    在項目根目錄下創建一個包含以下內容的 scheduler.php 文件。

    require_once __DIR__.'/vendor/autoload.php';
    use GO\Scheduler;
    // Create a new scheduler
    $scheduler = new Scheduler();
    // ... configure the scheduled jobs (see below) ...
    // Let the scheduler execute jobs which are due.
    $scheduler->run();

    然后在crontab中添加一個新條目,以便每分鐘運行 scheduler.php 。

    * * * * * /usr/local/php-8.4/bin/php /home/tinywan/demo/scheduler.php 1>> /dev/null 2>&1

    就是這樣!您的調度程序已經啟動并運行,現在您可以添加您的作業,而無需再擔心crontab。這個Cron每分鐘都會調用scheduler.php命令調度器。然后評估你的計劃任務并運行到期的任務。

    調度作業

    默認情況下,您的所有作業將嘗試在后臺運行。PHP腳本和原始命令默認情況下將在后臺運行,而函數將始終在前臺運行。您可以通過調用 inForeground() 方法強制命令在前臺運行。必須將輸出發送到電子郵件的作業將在前臺運行。

    執行一個PHP腳本

    $scheduler->php('path/to/my/script.php');

    計劃執行時間

    有幾種方法可以幫助您設置計劃的執行時間。如果您不調用此方法中的任何一個,則作業將每分鐘(*)運行一次。

    任何表達式

    at -此方法接受dragonmantank/cron-expression支持的任何表達式

    $scheduler->php('script.php')->at('* * * * *');

    每分鐘執行

    everyMinute 每分鐘執行。您可以選擇傳遞 $minute 以指定作業每 $minute 分鐘運行一次。

    $scheduler->php('script.php')->everyMinute();
    $scheduler->php('script.php')->everyMinute(5);

    每小時運行

    hourly 每小時運行一次。您可以選擇傳遞您想要運行的 $minute ,默認情況下,它將在每小時的'00'分鐘運行。

    $scheduler->php('script.php')->hourly();
    $scheduler->php('script.php')->hourly(53);

    每天運行

    daily 每天運行一次。您可以選擇傳遞 $hour$minute 以獲得更細粒度的控制(或字符串 hour:minute

    $scheduler->php('script.php')->daily();
    $scheduler->php('script.php')->daily(22, 03);
    $scheduler->php('script.php')->daily('22:03');

    最佳實踐

    項目根目錄 scheduler.php 文件參考

    pdeclare(strict_types=1);
    namespace think;
    date_default_timezone_set('PRC');
    require __DIR__ . '/vendor/autoload.php';
    # PHP 二進制文件路徑
    $bin = '/usr/local/php-8.4/bin/php';
    $script = __DIR__ . '/think';
    $scheduler = new \GO\Scheduler();
    # 2024年7月16日 執行一個Linux命令
    $scheduler->raw('ps aux | grep nginx');
    # 2024年7月10日 訂單自動取消 每1分鐘執行一次
    $scheduler->php($script . ' order cancel', $bin)->everyMinute(5);
    $scheduler->run();

    執行結果

    [2024-07-28T00:10:02+08:00][info] 定時任務-商品推廣關閉 end
    [2024-07-28T00:11:02+08:00][info] 定時任務-賬戶統計 end
    [2024-07-28T00:12:02+08:00][info] 定時任務-賬戶統計 end
    [2024-07-28T00:13:01+08:00][info] 定時任務-賬戶統計 end
    [2024-07-28T00:14:02+08:00][info] 定時任務-賬戶統計 end
    [2024-07-28T00:15:02+08:00][info] 定時任務-商品推廣關閉 start
    [2024-07-28T00:15:02+08:00][info] 定時任務-訂單 start
    [2024-07-28T00:15:02+08:00][info] 定時任務-賬戶統計 end

    小結

    本文快易數據將和大家一起探討如何在PHP環境下實現這種動態定時任務,旨在提供一個更加靈活、安全且易于管理的定時任務執行機制。這將極大地提升項目的可擴展性和運維效率。

    請登錄后查看

    快易數據中心 最后編輯于2024-07-29 11:11:16

    快捷回復
    回復
    回復
    回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
    排序 默認正序 回復倒序 點贊倒序

    {{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

    作者 管理員 企業

    {{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
    {{item.is_suggest == 1? '取消推薦': '推薦'}}
    沙發 板凳 地板 {{item.floor}}#
    {{item.user_info.title || '暫無簡介'}}
    附件

    {{itemf.name}}

    {{item.created_at}}  {{item.ip_address}}
    打賞
    已打賞¥{{item.reward_price}}
    {{item.like_count}}
    {{item.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復

    {{itemc.user_info.nickname}}

    {{itemc.user_name}}

    回復 {{itemc.comment_user_info.nickname}}

    附件

    {{itemf.name}}

    {{itemc.created_at}}
    打賞
    已打賞¥{{itemc.reward_price}}
    {{itemc.like_count}}
    {{itemc.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復
    查看更多
    打賞
    已打賞¥{{reward_price}}
    1869
    {{like_count}}
    {{collect_count}}
    添加回復 ({{post_count}})

    相關推薦

    快速安全登錄

    使用微信掃碼登錄
    {{item.label}} 加精
    {{item.label}} {{item.label}} 板塊推薦 常見問題 產品動態 精選推薦 首頁頭條 首頁動態 首頁推薦
    取 消 確 定
    回復
    回復
    問題:
    問題自動獲取的帖子內容,不準確時需要手動修改. [獲取答案]
    答案:
    提交
    bug 需求 取 消 確 定
    打賞金額
    當前余額:¥{{rewardUserInfo.reward_price}}
    {{item.price}}元
    請輸入 0.1-{{reward_max_price}} 范圍內的數值
    打賞成功
    ¥{{price}}
    完成 確認打賞

    微信登錄/注冊

    切換手機號登錄

    {{ bind_phone ? '綁定手機' : '手機登錄'}}

    {{codeText}}
    切換微信登錄/注冊
    暫不綁定
    亚洲欧美字幕
    CRMEB客服

    CRMEB咨詢熱線 咨詢熱線

    400-8888-794

    微信掃碼咨詢

    CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
    返回頂部 返回頂部
    CRMEB客服