


Panduan Pengaturcaraan Yii2: Kaedah Menjalankan Perkhidmatan Cron
Jika anda bertanya "Apakah Yii?", lihat tutorial saya sebelum ini: Pengenalan Rangka Kerja Yii yang meninjau faedah Yii , Ia juga menyediakan gambaran keseluruhan ciri baharu Yii 2.0 yang dikeluarkan pada Oktober 2014. Yeah>
Dalam siri Pengaturcaraan dengan Yii2 ini, saya akan membimbing pembaca menggunakan rangka kerja PHP Yii2. Dalam tutorial hari ini, saya akan berkongsi dengan anda cara memanfaatkan fungsi konsol Yii untuk menjalankan tugas cron.
Pada masa lalu, saya menggunakan wget — URL yang boleh diakses web — dalam tugas cron untuk menjalankan tugas latar belakang saya. Ini menimbulkan kebimbangan keselamatan dan mempunyai beberapa masalah prestasi. Semasa saya membincangkan beberapa cara untuk mengurangkan risiko dalam ciri keselamatan Siri Boot kami, saya berharap untuk beralih kepada arahan dipacu konsol. Dengan Yii2 ini agak mudah.
Untuk contoh hari ini, saya akan menunjukkan arahan cron berasaskan konsol pada tapak Twixxr saya, yang saya terangkan dalam episod API Twitter ini. Disebabkan oleh isu pengehadan kadar dan pengurusan prestasi, API Twitter sangat bergantung pada pekerjaan cron yang cekap dan boleh dipercayai. Jadi ini adalah contoh yang bagus untuk dikongsi dengan anda.
Sebelum saya bermula, saya ingin mengulangi: Saya sentiasa menghargai pendapat dan maklum balas anda. Jika anda mempunyai soalan atau cadangan topik, sila siarkan pendapat anda dalam ulasan di bawah. Anda juga boleh menghubungi saya terus di Twitter @reifman.
Apakah itu Cron?
Wikipedia menerangkan cron sebagai "penjadual kerja berasaskan masa dalam sistem pengendalian komputer seperti Unix." Ini agak tepat. Pada asasnya, cron menjalankan semua tugas latar belakang yang kami perlukan untuk menjalankan perkhidmatan web, daripada pengurusan log dan sandaran kepada permintaan API kepada pembersihan pangkalan data.
Untuk melihat kerja cron sedia ada pada pelayan, anda biasanya menaip sudo crontab -l
dan lihat sesuatu seperti ini: sudo crontab -l
并看到如下内容:
# 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
左侧指定每 3 或 15 分钟或每天午夜等激活这些任务,右侧是要运行的脚本。 另请参阅使用 Cron 作业安排任务 (Envato Tuts+)。
请注意 Let's Encrypt 脚本是一个独特的控制台命令。它从我们服务器上的命令行运行。但是,我上面的所有会议计划任务都是通过 wget 运行的。这就像一个机器人在特定时间在网络浏览器上运行针对我们执行后台任务的网络应用程序的请求。
除了外部 Web 请求所需的开销和服务器上脚本的超时限制之外,您还必须保护这些访问点。以下是会议策划者如何执行此操作的示例:
// 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 }
它验证用户是否以管理员身份登录或以相同的 Internet IP 地址在服务器上本地运行。
实现基于控制台的 Cron 命令
Alex Makarov 是 Yii 框架开发的主要志愿者之一,当我定期撰写有关 Envato Tuts+ 框架的文章时,他帮助回答了我的问题。读完我的安全事件后,他问我为什么不使用 Yii2 固有的控制台功能来执行 cron 作业。基本上我不知道。
就像我有一个 /frontend/controllers/DaemonController.php 一样,我创建了一个 /console/controllers/DaemonController.php。在本教程中,我将为更小、更简单的 Twixxr Web 服务执行此操作。
我习惯使用控制台运行数据库迁移(例如 ./yii migrate/up 7
),但仅此而已。我很想尝试使用它来执行后台任务。
正如我在之前的教程中所写的,我的新生网站 Twixxr 需要大量的后台进程来定期轮换 API 调用,以满足所有用户请求,以与女性拥有的有影响力的 Twitter 帐户交友。
主页如下所示:
所以我认为 Twixxr 会成为运行基于控制台的 cron 控制器的一个很好的测试平台。
新的 DaemonController.php
这是我的新的基于控制台的 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 } }
请注意,它与我的基于前端的控制器的结构非常相似,但它无法安全地通过网络访问,因为它位于 /console 树中。没有配置 Apache 网络服务器站点来浏览此区域。
因此,在上面的示例中,actionFrequent()
将每两到三分钟调用一次。它处理另一组 Twixxr 友谊请求。另一方面,actionQuarter()
每 15 分钟调用一次,并更新浏览帐户的配置文件信息。让我们看看 cron 文件中的计划是如何工作的。
新的 crontab 文件
本质上,在我的 crontab 文件中,我将 wget 替换为直接 Linux 脚本,如上所示,用于 Let's Encrypt 续订。
您输入 sudo crontab -e
进行编辑,或输入 -l
$ 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
./yii migrate/up 7
), tetapi itu sahaja. Saya ingin mencuba menggunakannya untuk melaksanakan tugas latar belakang. #🎜🎜#
#🎜🎜#Seperti yang saya tulis dalam tutorial sebelumnya, tapak web saya yang baru lahir, Twixxr memerlukan sejumlah besar proses latar belakang untuk kerap memutarkan panggilan API untuk memenuhi semua permintaan pengguna untuk bersosial dengan akaun Twitter influencer milik wanita. #🎜🎜#
#🎜🎜#Laman utama adalah seperti berikut: #🎜🎜#
#🎜🎜#
DaemonController.php Baharu
#🎜🎜#Ini adalah teras DaemonController.php berasaskan konsol baharu saya: #🎜🎜# rrreee #🎜🎜#Sila ambil perhatian bahawa strukturnya sangat serupa dengan pengawal berasaskan bahagian hadapan saya, namun ia tidak boleh diakses dengan selamat melalui rangkaian kerana ia terletak di pepohon /console. Tapak pelayan web Apache tidak dikonfigurasikan untuk menyemak imbas zon ini. #🎜🎜# #🎜🎜#Jadi, dalam contoh di atas,actionFrequent()
akan dipanggil setiap dua hingga tiga minit. Ia mengendalikan satu lagi set permintaan persahabatan Twixxr. Sebaliknya, actionQuarter()
dipanggil setiap 15 minit dan mengemas kini maklumat profil akaun menyemak imbas. Mari lihat cara penjadualan berfungsi dalam fail cron. #🎜🎜#
Fail crontab baharu
#🎜🎜#Pada asasnya, dalam fail crontab saya, saya menggantikan wget dengan skrip Linux langsung seperti yang ditunjukkan di atas untuk pembaharuan Let's Encrypt. #🎜🎜# #🎜🎜#Anda masukkansudo crontab -e
untuk mengedit, atau -l
untuk menyenaraikan kandungannya. Berikut ialah fail cron Twixxr saya: #🎜🎜#
$ 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,其中提到的示例网络服务
Atas ialah kandungan terperinci Panduan Pengaturcaraan Yii2: Kaedah Menjalankan Perkhidmatan Cron. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dengan perkembangan berterusan teknologi pengkomputeran awan, sandaran data telah menjadi sesuatu yang mesti dilakukan oleh setiap perusahaan. Dalam konteks ini, amat penting untuk membangunkan sistem sandaran awan yang sangat tersedia. Rangka kerja PHP Yii ialah rangka kerja berkuasa yang boleh membantu pembangun membina aplikasi web berprestasi tinggi dengan cepat. Berikut akan memperkenalkan cara menggunakan rangka kerja Yii untuk membangunkan sistem sandaran awan yang sangat tersedia. Mereka bentuk model pangkalan data Dalam rangka kerja Yii, model pangkalan data adalah bahagian yang sangat penting. Kerana sistem sandaran data memerlukan banyak jadual dan hubungan

Panduan penggunaan kunci pintasan lebar penuh dan separuh lebar Lebar penuh dan separuh lebar ialah dua keadaan yang biasa digunakan dalam kaedah input bahasa Cina Dalam keadaan lebar penuh, satu aksara menduduki kedudukan satu aksara, manakala dalam keadaan separuh lebar, satu aksara menduduki separuh daripada kedudukan watak. Dalam pemprosesan perkataan harian, selalunya perlu menukar antara lebar penuh dan separuh lebar, dan menguasai kekunci pintasan boleh meningkatkan kecekapan kerja. Artikel ini akan memperkenalkan anda kepada panduan penggunaan kekunci pintasan untuk menukar antara lebar penuh dan separuh lebar. 1. Pensuisan lebar penuh dan separuh lebar di bawah sistem Windows Untuk menukar antara keadaan lebar penuh dan separuh lebar di bawah sistem Windows, biasanya gunakan yang berikut

Memandangkan permintaan untuk aplikasi web terus berkembang, pembangun mempunyai lebih banyak pilihan dalam memilih rangka kerja pembangunan. Symfony dan Yii2 ialah dua rangka kerja PHP yang popular Kedua-duanya mempunyai fungsi dan prestasi yang berkuasa, tetapi apabila berhadapan dengan keperluan untuk membangunkan aplikasi web berskala besar, rangka kerja manakah yang lebih sesuai? Seterusnya kami akan menjalankan analisis perbandingan Symphony dan Yii2 untuk membantu anda membuat pilihan yang lebih baik. Gambaran Keseluruhan Asas Symphony ialah rangka kerja aplikasi web sumber terbuka yang ditulis dalam PHP dan dibina di atas

Rangka kerja Yii ialah rangka kerja aplikasi Web PHP sumber terbuka yang menyediakan pelbagai alatan dan komponen untuk memudahkan proses pembangunan aplikasi Web, yang mana pertanyaan data merupakan salah satu komponen penting. Dalam rangka kerja Yii, kita boleh menggunakan sintaks seperti SQL untuk mengakses pangkalan data untuk membuat pertanyaan dan memanipulasi data dengan cekap. Pembina pertanyaan rangka kerja Yii terutamanya termasuk jenis berikut: pertanyaan ActiveRecord, pertanyaan QueryBuilder, pertanyaan arahan dan pertanyaan SQL asal

Memandangkan Internet terus berkembang, permintaan untuk pembangunan aplikasi web juga semakin tinggi. Bagi pembangun, membangunkan aplikasi memerlukan rangka kerja yang stabil, cekap dan berkuasa, yang boleh meningkatkan kecekapan pembangunan. Yii ialah rangka kerja PHP berprestasi tinggi terkemuka yang menyediakan ciri yang kaya dan prestasi yang baik. Yii3 ialah versi generasi seterusnya bagi rangka kerja Yii, yang seterusnya mengoptimumkan prestasi dan kualiti kod berdasarkan Yii2. Dalam artikel ini, kami akan memperkenalkan cara menggunakan rangka kerja Yii3 untuk membangunkan aplikasi PHP.

Dalam era maklumat semasa, data besar, kecerdasan buatan, pengkomputeran awan dan teknologi lain telah menjadi tumpuan perusahaan utama. Di antara teknologi ini, teknologi pemaparan kad grafik, sebagai teknologi pemprosesan grafik berprestasi tinggi, telah mendapat perhatian yang lebih. Teknologi pemaparan kad grafik digunakan secara meluas dalam pembangunan permainan, filem dan kesan khas televisyen, pemodelan kejuruteraan dan bidang lain. Bagi pembangun, memilih rangka kerja yang sesuai dengan projek mereka adalah keputusan yang sangat penting. Antara bahasa semasa, PHP ialah bahasa yang sangat dinamik Beberapa rangka kerja PHP yang sangat baik seperti Yii2, Ph

Panduan Pengaturcaraan Tarikh PHP: Temui cara menggunakan PHP untuk menentukan hari dalam seminggu untuk tarikh tertentu Dalam pengaturcaraan PHP, anda sering perlu menangani isu berkaitan tarikh dan masa Salah satu keperluan biasa adalah untuk menentukan hari minggu untuk tarikh tertentu. PHP menyediakan pelbagai fungsi pemprosesan tarikh dan masa yang boleh melaksanakan fungsi ini dengan mudah. Artikel ini akan memperkenalkan secara terperinci cara menentukan hari dalam minggu tarikh tertentu dalam PHP dan memberikan contoh kod tertentu. 1. Gunakan fungsi date() untuk mendapatkan hari dalam seminggu Fungsi date() dalam PHP boleh digunakan untuk pemformatan.

Bahasa Go (Golang) ialah bahasa pengaturcaraan yang dibangunkan oleh Google Reka bentuknya ringkas, cekap dan mempunyai ciri konkurensi yang kuat, jadi ia digemari oleh ramai pembangun. Artikel ini akan memberi anda panduan pengenalan ringkas kepada pengaturcaraan bahasa Go, memperkenalkan konsep asas dan sintaks serta melampirkan contoh kod khusus untuk membantu anda memahami dan mempelajari pengaturcaraan bahasa Go dengan lebih baik. Langkah pertama dalam menyediakan dan mengkonfigurasi persekitaran ialah menyediakan persekitaran pembangunan untuk bahasa Go. Anda boleh pergi ke laman web rasmi Go (https://golang.org/)
