自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何動(dòng)態(tài)設(shè)置定時(shí)任務(wù)!而不是寫死在Linux Crontab

開(kāi)發(fā) 前端
本文將探討如何在PHP環(huán)境下實(shí)現(xiàn)這種動(dòng)態(tài)定時(shí)任務(wù),旨在提供一個(gè)更加靈活、安全且易于管理的定時(shí)任務(wù)執(zhí)行機(jī)制。這將極大地提升項(xiàng)目的可擴(kuò)展性和運(yùn)維效率。

概述

在軟件開(kāi)發(fā)中,定時(shí)任務(wù)是一個(gè)常見(jiàn)的需求,尤其是在需要定期執(zhí)行某些操作的場(chǎng)景中。傳統(tǒng)的Linux cron服務(wù)雖然強(qiáng)大,但它的靈活性確實(shí)有限,尤其是在動(dòng)態(tài)調(diào)整任務(wù)執(zhí)行時(shí)間方面。但在實(shí)際項(xiàng)目運(yùn)行中動(dòng)態(tài)修改任務(wù)執(zhí)行時(shí)間,實(shí)在不太靈活。

隨著項(xiàng)目規(guī)模的擴(kuò)大,管理大量的cron任務(wù)和它們的配置文件可能會(huì)變得復(fù)雜且容易出錯(cuò)。特別是在多環(huán)境部署的情況下,維護(hù)一致性和同步配置文件需要額外的工作。

由于cron任務(wù)的執(zhí)行時(shí)間和頻率是預(yù)定義的,當(dāng)任務(wù)執(zhí)行出現(xiàn)問(wèn)題時(shí),調(diào)試和跟蹤可能會(huì)比較困難。特別是當(dāng)任務(wù)依賴于外部系統(tǒng)或資源時(shí),問(wèn)題定位和解決會(huì)更加復(fù)雜。頻繁修改cron配置文件可能會(huì)引入安全風(fēng)險(xiǎn),尤其是在多用戶環(huán)境中。不當(dāng)?shù)臋?quán)限管理或配置錯(cuò)誤可能會(huì)導(dǎo)致任務(wù)被惡意利用或執(zhí)行不適當(dāng)?shù)牟僮鳌?/p>

Cron Scheduler

PHP Cron Scheduler 是一個(gè)與框架無(wú)關(guān)的cron作業(yè)調(diào)度程序,可以輕松地與您的項(xiàng)目集成或作為獨(dú)立的命令調(diào)度程序運(yùn)行。在使用這個(gè)任務(wù)調(diào)度器時(shí),你只需要在你的服務(wù)器上創(chuàng)建單個(gè) scheduler.php 入口。你的任務(wù)調(diào)度在scheduler.php方法中進(jìn)行定義。

安裝

composer require peppeocchi/php-cron-scheduler

開(kāi)源地址:https://github.com/peppeocchi/php-cron-scheduler

如何工作

在項(xiàng)目根目錄下創(chuàng)建一個(gè)包含以下內(nèi)容的 scheduler.php 文件。

<?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中添加一個(gè)新條目,以便每分鐘運(yùn)行 scheduler.php 。

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

就是這樣!您的調(diào)度程序已經(jīng)啟動(dòng)并運(yùn)行,現(xiàn)在您可以添加您的作業(yè),而無(wú)需再擔(dān)心crontab。這個(gè)Cron每分鐘都會(huì)調(diào)用scheduler.php命令調(diào)度器。然后評(píng)估你的計(jì)劃任務(wù)并運(yùn)行到期的任務(wù)。

調(diào)度作業(yè)

默認(rèn)情況下,您的所有作業(yè)將嘗試在后臺(tái)運(yùn)行。PHP腳本和原始命令默認(rèn)情況下將在后臺(tái)運(yùn)行,而函數(shù)將始終在前臺(tái)運(yùn)行。您可以通過(guò)調(diào)用 inForeground() 方法強(qiáng)制命令在前臺(tái)運(yùn)行。必須將輸出發(fā)送到電子郵件的作業(yè)將在前臺(tái)運(yùn)行。

執(zhí)行一個(gè)PHP腳本

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

計(jì)劃執(zhí)行時(shí)間

有幾種方法可以幫助您設(shè)置計(jì)劃的執(zhí)行時(shí)間。如果您不調(diào)用此方法中的任何一個(gè),則作業(yè)將每分鐘(*)運(yùn)行一次。

任何表達(dá)式

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

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

每分鐘執(zhí)行

everyMinute 每分鐘執(zhí)行。您可以選擇傳遞 $minute 以指定作業(yè)每 $minute 分鐘運(yùn)行一次。

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

每小時(shí)運(yùn)行

hourly 每小時(shí)運(yùn)行一次。您可以選擇傳遞您想要運(yùn)行的 $minute ,默認(rèn)情況下,它將在每小時(shí)的'00'分鐘運(yùn)行。

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

每天運(yùn)行

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

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

最佳實(shí)踐

項(xiàng)目根目錄 scheduler.php 文件參考

<?php
declare(strict_types=1);

namespace think;

date_default_timezone_set('PRC');

require __DIR__ . '/vendor/autoload.php';

# PHP 二進(jìn)制文件路徑
$bin = '/usr/local/php-8.4/bin/php';
$script = __DIR__ . '/think';

$scheduler = new \GO\Scheduler();

# 2024年7月16日 @add Tinywan 執(zhí)行一個(gè)Linux命令
$scheduler->raw('ps aux | grep nginx');

# 2024年7月10日 @add Tinywan 訂單自動(dòng)取消 每1分鐘執(zhí)行一次
$scheduler->php($script . ' order cancel', $bin)->everyMinute(5);

$scheduler->run();

執(zhí)行結(jié)果

[2024-07-28T00:10:02+08:00][info] 定時(shí)任務(wù)-商品推廣關(guān)閉 end
[2024-07-28T00:11:02+08:00][info] 定時(shí)任務(wù)-賬戶統(tǒng)計(jì) end
[2024-07-28T00:12:02+08:00][info] 定時(shí)任務(wù)-賬戶統(tǒng)計(jì) end
[2024-07-28T00:13:01+08:00][info] 定時(shí)任務(wù)-賬戶統(tǒng)計(jì) end
[2024-07-28T00:14:02+08:00][info] 定時(shí)任務(wù)-賬戶統(tǒng)計(jì) end
[2024-07-28T00:15:02+08:00][info] 定時(shí)任務(wù)-商品推廣關(guān)閉 start
[2024-07-28T00:15:02+08:00][info] 定時(shí)任務(wù)-訂單 start
[2024-07-28T00:15:02+08:00][info] 定時(shí)任務(wù)-賬戶統(tǒng)計(jì) end

小結(jié)

本文將探討如何在PHP環(huán)境下實(shí)現(xiàn)這種動(dòng)態(tài)定時(shí)任務(wù),旨在提供一個(gè)更加靈活、安全且易于管理的定時(shí)任務(wù)執(zhí)行機(jī)制。這將極大地提升項(xiàng)目的可擴(kuò)展性和運(yùn)維效率。

責(zé)任編輯:武曉燕 來(lái)源: 開(kāi)源技術(shù)小棧
相關(guān)推薦

2009-10-28 10:05:29

Ubuntucrontab定時(shí)任務(wù)

2010-03-10 15:47:58

crontab定時(shí)任務(wù)

2022-11-11 14:55:14

Linuxcron

2010-01-07 13:38:41

Linux定時(shí)任務(wù)

2024-11-04 16:01:01

2010-07-15 14:54:51

at命令crontab定時(shí)執(zhí)行任務(wù)

2021-12-16 14:25:03

Linux定時(shí)任務(wù)

2016-12-27 19:29:14

Linux命令定時(shí)任務(wù)

2018-10-08 14:00:28

LinuxCron定時(shí)任務(wù)

2009-11-13 09:40:27

linux定時(shí)執(zhí)行crontab

2021-04-16 13:20:41

ZeitLinux工具

2012-02-07 13:31:14

SpringJava

2025-04-27 08:01:25

2023-10-31 12:42:00

Spring動(dòng)態(tài)增刪啟停

2023-11-07 07:47:35

Topic線程PUSH

2024-02-28 09:54:07

線程池配置

2022-03-28 08:31:29

線程池定時(shí)任務(wù)

2023-12-13 18:44:02

Linux定時(shí)任務(wù)操作系統(tǒng)

2023-12-11 09:50:35

Linux定時(shí)器

2024-12-27 08:24:55

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)