Inhaltsverzeichnis
Was ist Cron?
Konsolenbasierten Cron-Befehl implementieren
Neuer DaemonController.php
Neue Crontab-Datei
需要考虑的问题
下一步是什么
相关链接
Heim Backend-Entwicklung PHP-Tutorial Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus

Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus

Sep 01, 2023 pm 11:21 PM
yii 编程指南 cron服务

Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus

Wenn Sie fragen: „Was ist Yii?“ schauen Sie sich mein vorheriges Tutorial an: Einführung in das Yii-Framework, das die Vorteile von Yii bespricht und die Neuerungen in Yii 2.0 beschreibt, das im Oktober 2014 veröffentlicht wurde. Hmm>

In dieser Serie „Programmieren mit Yii2“ werde ich die Leser durch die Verwendung des Yii2-PHP-Frameworks führen. Im heutigen Tutorial werde ich Ihnen zeigen, wie Sie die Konsolenfunktionalität von Yii nutzen können, um Cron-Jobs auszuführen.

In der Vergangenheit habe ich wget – eine über das Internet zugängliche URL – in einem Cronjob verwendet, um meine Hintergrundaufgaben auszuführen. Dies wirft Sicherheitsbedenken auf und hat einige Leistungsprobleme zur Folge. Während ich einige Möglichkeiten zur Risikominimierung in unserer Boot Series-Sicherheitsfunktion besprochen habe, hatte ich gehofft, auf konsolengesteuerte Befehle umsteigen zu können. Mit Yii2 ist das ziemlich einfach.

Für das heutige Beispiel demonstriere ich den konsolenbasierten Cron-Befehl auf meiner Twixxr-Site, den ich in dieser Twitter-API-Episode beschreibe. Aufgrund von Ratenbegrenzungs- und Leistungsverwaltungsproblemen ist die Twitter-API stark auf effiziente, zuverlässige Cron-Jobs angewiesen. Das ist also ein großartiges Beispiel, das Sie mit Ihnen teilen können.

Bevor ich anfange, möchte ich noch einmal betonen: Ich freue mich immer über Ihre Ideen und Ihr Feedback. Wenn Sie Fragen oder Themenvorschläge haben, posten Sie Ihre Gedanken bitte unten in den Kommentaren. Sie können mich auch direkt auf Twitter @reifman kontaktieren.

Was ist Cron?

Wikipedia beschreibt Cron als „einen zeitbasierten Job-Scheduler in Unix-ähnlichen Computer-Betriebssystemen“. Das ist ziemlich genau. Im Grunde führt Cron alle Hintergrundaufgaben aus, die wir zum Ausführen von Webdiensten benötigen, von der Protokollverwaltung und Sicherungen über API-Anfragen bis hin zur Datenbankbereinigung.

Um vorhandene Cron-Jobs auf einem Server anzuzeigen, geben Sie normalerweise sudo crontab -l ein und sehen etwa Folgendes:

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
*/3 * * * * wget -O /dev/null https://meetingplanner.io/daemon/frequent
*/15 * * * * wget -O /dev/null http://meetingplanner.io/daemon/quarter
0 * * * * wget -O /dev/null http://meetingplanner.io/daemon/hourly
15 1 * * * wget -O /dev/null http://meetingplanner.io/daemon/overnight
40 2 * * * /usr/sbin/automysqlbackup
15 3 * * 5 wget -O /dev/null http://meetingplanner.io/daemon/weekly
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
Nach dem Login kopieren

Geben Sie links an, ob diese Aufgaben alle 3 oder 15 Minuten oder jeden Tag um Mitternacht usw. aktiviert werden sollen, und rechts befindet sich das auszuführende Skript. Siehe auchAufgaben mithilfe von Cron-Jobs planen (Envato Tuts+).

Bitte beachten Sie, dass das Let's Encrypt-Skript ein einzigartiger Konsolenbefehl ist. Es wird über die Befehlszeile auf unserem Server ausgeführt. Allerdings werden alle meine oben genannten Besprechungsplanaufgaben über wget ausgeführt. Es ist wie ein Bot, der zu einem bestimmten Zeitpunkt Anfragen im Webbrowser an unsere Webanwendung ausführt, die Hintergrundaufgaben ausführt.

Zusätzlich zum Overhead, der für externe Webanfragen und Timeout-Einschränkungen für Skripte auf dem Server erforderlich ist, müssen Sie diese Zugriffspunkte auch sichern. Hier ist ein Beispiel dafür, wie Tagungsplaner dies tun können:

// only cron jobs and admins can run this controller's actions
    public function beforeAction($action)
    {
      // your custom code here, if you want the code to run before action filters,
      // which are triggered on the [[EVENT_BEFORE_ACTION]] event, e.g. PageCache or AccessControl
      if (!parent::beforeAction($action)) {
          return false;
      }
      // other custom code here
      if (( $_SERVER['REMOTE_ADDR'] == $_SERVER['SERVER_ADDR'] ) ||
          (!\Yii::$app->user->isGuest && \common\models\User::findOne(Yii::$app->user->getId())->isAdmin()))
       {
         return true;
       }
      return false; // or false to not run the action
    }
Nach dem Login kopieren

Es überprüft, ob der Benutzer als Administrator angemeldet ist oder lokal auf dem Server mit derselben Internet-IP-Adresse ausgeführt wird.

Konsolenbasierten Cron-Befehl implementieren

Alex Makarov ist einer der wichtigsten Freiwilligen, die am Yii-Framework arbeiten, und er hilft mir bei der Beantwortung meiner Fragen, wenn ich regelmäßig über das Envato Tuts+-Framework schreibe. Nachdem er meinen Sicherheitsvorfall gelesen hatte, fragte er mich, warum ich nicht die native Konsolenfunktionalität von Yii2 verwendet habe, um Cron-Jobs auszuführen. Im Grunde weiß ich es nicht.

So wie ich eine /frontend/controllers/DaemonController.php hatte, habe ich eine /console/controllers/DaemonController.php erstellt. In diesem Tutorial werde ich dies für einen kleineren, einfacheren Twixxr-Webdienst tun.

Ich bin es gewohnt, die Konsole zum Ausführen von Datenbankmigrationen zu verwenden (wie ./yii migrate/up 7), aber das ist auch schon alles. Ich würde gerne versuchen, damit Hintergrundaufgaben auszuführen.

Wie ich in einem früheren Tutorial geschrieben habe, erforderte meine entstehende Website Twixxr viele Hintergrundprozesse, um regelmäßig API-Aufrufe zu rotieren, um alle Benutzeranfragen zu erfüllen, mit Twitter-Konten weiblicher Influencer in Kontakt zu treten.

Die Homepage lautet wie folgt:

Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus

Also dachte ich, Twixxr wäre eine gute Testplattform für die Ausführung konsolenbasierter Cron-Controller.

Neuer DaemonController.php

Dies ist der Kern meines neuen konsolenbasierten DaemonController.php:

<?php
namespace console\controllers;

use Yii;
use yii\helpers\Url;
use yii\console\Controller;
use frontend\models\Twixxr;

/**
 * Test controller
 */
class DaemonController extends Controller {

    public function actionIndex() {
        echo "Yes, cron service is running.";
    }

    public function actionFrequent() {
      // called every two minutes
      // */2 * * * * ~/sites/www/yii2/yii test
      $time_start = microtime(true);
      $x = new \frontend\models\Twixxr();
      $x->process($time_start);
      $time_end = microtime(true);
      echo 'Processing for '.($time_end-$time_start).' seconds';
    }

    public function actionQuarter() {
        // called every fifteen minutes
        $x = new \frontend\models\Twixxr();
        $x->loadProfiles();
      }

      public function actionHourly() {
        // every hour
        $current_hour = date('G');
        if ($current_hour%4) {
          // every four hours
        }
            if ($current_hour%6) {
            // every six hours
          }
      	}
Nach dem Login kopieren

Bitte beachten Sie, dass er in seiner Struktur meinem Front-End-basierten Controller sehr ähnlich ist, allerdings ist er nicht sicher über das Netzwerk zugänglich, da er sich im /console-Baum befindet. Die Apache-Webserver-Site ist nicht zum Durchsuchen dieser Zone konfiguriert.

Im obigen Beispiel wird actionFrequent() 将每两到三分钟调用一次。它处理另一组 Twixxr 友谊请求。另一方面,actionQuarter() also alle 15 Minuten aufgerufen und aktualisiert die Profilinformationen des Browserkontos. Sehen wir uns an, wie die Planung in einer Cron-Datei funktioniert.

Neue Crontab-Datei

Im Wesentlichen habe ich in meiner Crontab-Datei wget durch ein reines Linux-Skript ersetzt, wie oben für die Let's Encrypt-Erneuerung gezeigt.

Sie geben sudo crontab -e 进行编辑,或输入 -l ein, um den Inhalt aufzulisten. Hier ist meine Twixxr-Cron-Datei:

$ sudo crontab -l
# m h  dom mon dow   command
*/3 * * * * /var/www/twixxr/yii daemon/frequent
*/15 * * * * /var/www/twixxr/yii daemon/quarter
0 * * * * /var/www/twixxr/yii daemon/hourly
15 1 * * * /var/www/twixxr/yii daemon/overnight
15 3 * * 5 /var/www/twixxr/yii daemon/weekly
#40 2 * * * /usr/sbin/automysqlbackup
30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
Nach dem Login kopieren

这非常简单。 /var/www/twixxr/yii daemon/frequent 的左侧是 yii 解释器所在的路径,右侧是控制台控制器和调用的方法。 p>

切换时一切都很顺利。我还没有切换 Meeting Planner,因为我想做更多测试。当后台任务中断时,很难知道也很难调试它们(尽管 Sentry 错误日志记录有很大帮助)。

需要考虑的问题

我遇到的一个问题是控制台命名空间与前端命名空间不同,因此,例如,我在教程中设置的 SiteHelper.php 组件(该组件描述了从单个代码库运行多个网站)失败了当我调用它时。删除它是有效的,但我需要运行测试以确保底层后台代码仍然有效。不过,大部分情况下切换都很顺利。

与任何其他代码更改一样,彻底测试和监控。

下一步是什么

展望未来,我将探索在 Yii2 框架内构建 REST API,该框架恰好依赖于创建一个不同的子树,例如控制台树,但用于外部 API。当然,这会带来复杂的身份验证和安全问题……所以与您一起探索这些将会很有趣。我将从多个角度研究 API。我对此感到非常兴奋。

请观看我的“使用 Yii2 编程”系列中即将推出的教程,我将继续深入研究该框架的不同方面。另请浏览“使用 PHP 构建您的初创公司”系列,其中记录了构建 Simple Planner 和 Meeting Planner 的过程。

如果您想知道下一个 Yii2 教程何时发布,请在 Twitter 上关注我 @reifman 或查看我的讲师页面以获取更新。

相关链接

  • Yii2 Developer Exchange,我的 Yii2 资源站点
  • 使用 Cron 作业安排任务 (Envato Tuts+)

  • 如何在 Yii2 中实现 cron(Yii 文档)
  • Twixxr,其中提到的示例网络服务

Das obige ist der detaillierte Inhalt vonYii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So entwickeln Sie mit dem PHP-Framework Yii ein hochverfügbares Cloud-Backup-System So entwickeln Sie mit dem PHP-Framework Yii ein hochverfügbares Cloud-Backup-System Jun 27, 2023 am 09:04 AM

Mit der kontinuierlichen Weiterentwicklung der Cloud-Computing-Technologie ist die Datensicherung zu etwas geworden, das jedes Unternehmen durchführen muss. In diesem Zusammenhang ist es besonders wichtig, ein hochverfügbares Cloud-Backup-System zu entwickeln. Das PHP-Framework Yii ist ein leistungsstarkes Framework, das Entwicklern dabei helfen kann, schnell leistungsstarke Webanwendungen zu erstellen. Im Folgenden wird vorgestellt, wie Sie mit dem Yii-Framework ein hochverfügbares Cloud-Backup-System entwickeln. Entwerfen des Datenbankmodells Im Yii-Framework ist das Datenbankmodell ein sehr wichtiger Teil. Denn das Datensicherungssystem erfordert viele Tabellen und Beziehungen

Anleitung zur Verwendung von Tastenkombinationen zum Wechseln in voller und halber Breite Anleitung zur Verwendung von Tastenkombinationen zum Wechseln in voller und halber Breite Mar 26, 2024 am 09:30 AM

Anleitung zur Verwendung von Tastenkombinationen in voller Breite und halber Breite. Volle Breite und halbe Breite sind zwei Zustände, die üblicherweise in chinesischen Eingabemethoden verwendet werden. Im Zustand voller Breite nimmt ein Zeichen die Position eines Zeichens ein, während im Zustand halber Breite ein Zeichen einnimmt nimmt die Hälfte der Position eines Charakters ein. Bei der täglichen Textverarbeitung ist es häufig erforderlich, zwischen voller und halber Breite zu wechseln, und die Beherrschung von Tastenkombinationen kann die Arbeitseffizienz verbessern. In diesem Artikel erfahren Sie, wie Sie mit den Tastenkombinationen zwischen voller und halber Breite wechseln. 1. Umschalten zwischen voller und halber Breite unter Windows-Systemen Um zwischen Voll- und Halbbreitenzuständen unter Windows zu wechseln, verwenden Sie normalerweise Folgendes

Symfony vs Yii2: Welches Framework eignet sich besser für die Entwicklung umfangreicher Webanwendungen? Symfony vs Yii2: Welches Framework eignet sich besser für die Entwicklung umfangreicher Webanwendungen? Jun 19, 2023 am 10:57 AM

Da die Nachfrage nach Webanwendungen weiter wächst, haben Entwickler bei der Auswahl von Entwicklungsframeworks immer mehr Möglichkeiten. Symfony und Yii2 sind zwei beliebte PHP-Frameworks. Sie verfügen beide über leistungsstarke Funktionen und Leistung. Welches Framework ist jedoch besser geeignet, wenn es darum geht, umfangreiche Webanwendungen zu entwickeln? Als nächstes führen wir eine vergleichende Analyse von Symphony und Yii2 durch, um Ihnen zu helfen, eine bessere Wahl zu treffen. Grundlegende Übersicht Symphony ist ein Open-Source-Webanwendungs-Framework, das in PHP geschrieben ist und darauf aufbaut

Datenabfrage im Yii-Framework: Effizienter Zugriff auf Daten Datenabfrage im Yii-Framework: Effizienter Zugriff auf Daten Jun 21, 2023 am 11:22 AM

Das Yii-Framework ist ein Open-Source-PHP-Webanwendungsframework, das zahlreiche Tools und Komponenten zur Vereinfachung des Prozesses der Webanwendungsentwicklung bereitstellt, wobei die Datenabfrage eine der wichtigen Komponenten ist. Im Yii-Framework können wir eine SQL-ähnliche Syntax verwenden, um auf die Datenbank zuzugreifen und Daten effizient abzufragen und zu bearbeiten. Der Abfrage-Builder des Yii-Frameworks umfasst hauptsächlich die folgenden Typen: ActiveRecord-Abfrage, QueryBuilder-Abfrage, Befehlsabfrage und Original-SQL-Abfrage

Wie verwende ich das Yii3-Framework in PHP? Wie verwende ich das Yii3-Framework in PHP? May 31, 2023 pm 10:42 PM

Mit der Weiterentwicklung des Internets wird auch die Nachfrage nach der Entwicklung von Webanwendungen immer größer. Für Entwickler erfordert die Entwicklung von Anwendungen ein stabiles, effizientes und leistungsstarkes Framework, das die Entwicklungseffizienz verbessern kann. Yii ist ein führendes Hochleistungs-PHP-Framework, das umfangreiche Funktionen und gute Leistung bietet. Yii3 ist die nächste Generation des Yii-Frameworks, das die Leistung und Codequalität basierend auf Yii2 weiter optimiert. In diesem Artikel stellen wir vor, wie Sie das Yii3-Framework zum Entwickeln von PHP-Anwendungen verwenden.

Yii2 vs. Phalcon: Welches Framework eignet sich besser für die Entwicklung von Grafik-Rendering-Anwendungen? Yii2 vs. Phalcon: Welches Framework eignet sich besser für die Entwicklung von Grafik-Rendering-Anwendungen? Jun 19, 2023 am 08:09 AM

Im aktuellen Informationszeitalter sind Big Data, künstliche Intelligenz, Cloud Computing und andere Technologien in den Fokus großer Unternehmen gerückt. Unter diesen Technologien hat die Grafikkarten-Rendering-Technologie als leistungsstarke Grafikverarbeitungstechnologie immer mehr Aufmerksamkeit erhalten. Die Grafikkarten-Rendering-Technologie wird häufig in der Spieleentwicklung, bei Film- und Fernsehspezialeffekten, im technischen Modellbau und in anderen Bereichen eingesetzt. Für Entwickler ist die Wahl eines Frameworks, das zu ihren Projekten passt, eine sehr wichtige Entscheidung. Unter den aktuellen Sprachen ist PHP eine sehr dynamische Sprache. Einige hervorragende PHP-Frameworks wie Yii2, Ph

PHP-Anleitung zur Datumsprogrammierung: Entdecken Sie, wie Sie mit PHP den Wochentag für ein Datum bestimmen PHP-Anleitung zur Datumsprogrammierung: Entdecken Sie, wie Sie mit PHP den Wochentag für ein Datum bestimmen Mar 19, 2024 pm 06:09 PM

PHP-Anleitung zur Datumsprogrammierung: Erfahren Sie, wie Sie mit PHP den Wochentag für ein bestimmtes Datum bestimmen. Bei der PHP-Programmierung müssen wir uns häufig mit datums- und zeitbezogenen Problemen befassen die Woche für ein bestimmtes Datum. PHP bietet eine Fülle von Datums- und Uhrzeitverarbeitungsfunktionen, mit denen diese Funktion einfach implementiert werden kann. In diesem Artikel wird detailliert beschrieben, wie Sie den Wochentag eines bestimmten Datums in PHP ermitteln, und es werden konkrete Codebeispiele aufgeführt. 1. Verwenden Sie die Funktion date(), um den Wochentag abzurufen. Die Funktion date() in PHP kann zur Formatierung verwendet werden.

Ein Leitfaden für Anfänger zur Go-Sprachprogrammierung Ein Leitfaden für Anfänger zur Go-Sprachprogrammierung Mar 25, 2024 am 09:30 AM

Go-Sprache (Golang) ist eine von Google entwickelte Programmiersprache. Ihr Design ist einfach, effizient und verfügt über starke Parallelitätsfunktionen, weshalb sie von vielen Entwicklern bevorzugt wird. Dieser Artikel bietet Ihnen eine einfache Einführung in die Go-Sprachprogrammierung, stellt grundlegende Konzepte und Syntax vor und fügt spezifische Codebeispiele hinzu, damit Sie die Go-Sprachprogrammierung besser verstehen und erlernen können. Der erste Schritt beim Einrichten und Konfigurieren der Umgebung besteht darin, eine Entwicklungsumgebung für die Go-Sprache einzurichten. Sie können die offizielle Website von Go besuchen (https://golang.org/).

See all articles