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

Undress AI Tool
Ausziehbilder kostenlos

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

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

Stock Market GPT
KI-gestützte Anlageforschung für intelligentere Entscheidungen

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



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

Die Hauptunterschiede zwischen Laravel und YII sind Designkonzepte, funktionale Eigenschaften und Nutzungsszenarien. 1. Laravel konzentriert sich auf die Einfachheit und das Vergnügen der Entwicklung und bietet reichhaltige Funktionen wie eloquentorm und handwerkliche Werkzeuge, die für schnelle Entwicklung und Anfänger geeignet sind. 2.YII betont Leistung und Effizienz, eignet sich für Hochlastanwendungen und bietet effiziente Activerecord- und Cache-Systeme, verfügt jedoch über eine steile Lernkurve.

Zu den Schritten zum Containerieren und Bereitstellen von YII -Anwendungen mit Docker gehören: 1.. Erstellen Sie eine Dockerfile und definieren Sie den Bildaufbauprozess; 2. Verwenden Sie DockerCompon, um YII -Anwendungen und MySQL -Datenbank zu starten. 3.. Die Bildgröße und -leistung optimieren. Dies beinhaltet nicht nur spezifische technische Operationen, sondern auch die Arbeitsprinzipien und Best Practices von Dockerfile, um eine effiziente und zuverlässige Bereitstellung zu gewährleisten.

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

Migratingalaravel ProjectToyiiIshallingButachieffable WithElowlflant.1) MAPOUTLARAVER -Komponenten Likeroutes, Controller und Models.2) Translatelarave's Sartisancommandeloequenttooyii's Giiandetiverecorba's

Der Hauptunterschied zwischen älteren YII -Entwicklern und Junior YII -Entwicklern ist die Erfahrung, die Tiefe der Fähigkeiten und die Denkweise. 1. Senior -Entwickler achten auf die Leistungsoptimierung und den Rekonstruktion von Code und verwenden den Cache -Mechanismus von YII, um die Anwendungsleistung zu verbessern. 2. Sie verstehen die zugrunde liegenden Prinzipien von YII zutiefst, nehmen am architektonischen Design und am technischen Entscheidungsfindung teil und verwenden modulares Design, um flexible Anwendungen zu erstellen. 3. Senior-Entwickler achten auf die Gesamtprojektplanung und die langfristige Entwicklung und spielen die Rolle des Mentors. Junior -Entwickler müssen sich durch Lernen und Üben nach und nach verbessern und schließlich zu hochrangigen Entwicklern wachsen.

Zu den wichtigsten Fähigkeiten, die europäische YII-Entwickler besitzen müssen, gehören: 1. YII-Framework-Kompetenz, 2. PHP-Kompetenz, 3. Datenbankmanagement, 4. Front-End-Fähigkeiten, 5. RESTFOR API-Entwicklung, 6. Versionskontrollsystem, 7. Testen und Debugging, 8. Sicherheitswissen, 9. Agile Methodie, 10. Soft Skills, 11. Lokalisierung und Internationalisierung.
