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
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 }
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:
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 } }
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
这非常简单。 /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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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 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

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

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

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.

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: 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.

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/).
