ホームページ >バックエンド開発 >PHPチュートリアル >Yii2 プログラミングガイド: Cron サービスの実行方法
「Yii とは何ですか?」という質問がある場合は、私の以前のチュートリアルを参照してください: Yii フレームワークの概要 ここでは、Yii の利点を確認し、 3 月にリリースされた Yii 2.0 の 2014-10 年の新機能の概要。 まあ>
この Yii2 によるプログラミング シリーズでは、読者に Yii2 PHP フレームワークの使用方法を説明します。今日のチュートリアルでは、Yii のコンソール機能を活用して cron ジョブを実行する方法を共有します。
以前は、cron ジョブで wget (Web アクセス可能な URL) を使用してバックグラウンド タスクを実行していました。これにより、セキュリティ上の懸念が生じ、パフォーマンス上の問題も発生します。 Boot Series のセキュリティ機能のリスクを軽減するいくつかの方法について説明しましたが、コンソール主導のコマンドに移行したいと考えていました。 Yii2 を使用すると、これは非常に簡単です。
今日の例では、私の Twixxr サイトでコンソールベースの cron コマンドをデモします。これについては、この Twitter API エピソードで説明します。レート制限とパフォーマンス管理の問題により、Twitter API は効率的で信頼性の高い cron ジョブに大きく依存しています。これは、皆さんと共有するのに最適な例です。
始める前に、繰り返しておきたいのですが、皆さんのアイデアやフィードバックにはいつも感謝しています。質問やトピックの提案がある場合は、以下のコメント欄に意見を投稿してください。 Twitter @reifman で直接私にご連絡いただくこともできます。
Wikipedia では cron を「Unix に似たコンピュータ オペレーティング システムの時間ベースのジョブ スケジューラ」と説明しています。これは非常に正確です。基本的に、cron は、ログ管理やバックアップから API リクエスト、データベースのクリーンアップまで、Web サービスの実行に必要なすべてのバックグラウンド タスクを実行します。
サーバー上の既存の cron ジョブを表示するには、通常、sudo crontab -l
と入力すると、次のような内容が表示されます。
リーリー
「Cron ジョブを使用してタスクをスケジュールする (Envato Tuts)」 も参照してください。 Let's Encrypt スクリプトは独自のコンソール コマンドであることに注意してください。これはサーバー上のコマンドラインから実行されます。ただし、上記の会議スケジュール タスクはすべて wget 経由で実行されます。これは、バックグラウンド タスクを実行する Web アプリケーションに対して、特定の時間に Web ブラウザー上でリクエストを実行するボットのようなものです。
外部 Web リクエストに必要なオーバーヘッドとサーバー上のスクリプトのタイムアウト制約に加えて、これらのアクセス ポイントも保護する必要があります。会議プランナーがこれを行う方法の例を次に示します:リーリー
ユーザーが管理者としてログインしているか、同じインターネット IP アドレスを持つサーバー上でローカルに実行されているかを確認します。コンソールベースの Cron コマンドを実装する
Alex Makarov は、Yii フレームワークの開発における主要なボランティアの 1 人で、私が Envato Tuts フレームワークについて定期的に書いているとき、私の質問に答えてくれます。私のセキュリティインシデントを読んだ後、彼は私に、なぜ Yii2 のネイティブ コンソール機能を使用して cron ジョブを実行しなかったのかと尋ねました。基本的には分かりません。
私はコンソールを使用してデータベース移行を実行することに慣れていますが (例:
./yii merge/up 7
)、それだけです。バックグラウンドタスクの実行に使用してみたいと思います。
前のチュートリアルで書いたように、私の初期の Web サイト Twixxr では、女性が所有するインフルエンサーの Twitter アカウントと交流したいというすべてのユーザー リクエストを満たすために API 呼び出しを定期的にローテーションするために、多数のバックグラウンド プロセスが必要でした。
そこで私は、Twixxr がコンソールベースの cron コントローラーを実行するための優れたテスト プラットフォームであると考えました。
新しい DaemonController.phpこれは、新しいコンソールベースの DaemonController.php のコアです:
したがって、上記の例では、
actionFrequent()
が 2 ~ 3 分ごとに呼び出されます。これは、別の一連の Twixxr 友情リクエストを処理します。一方、actionQuarter() は 15 分ごとに呼び出され、閲覧アカウントのプロファイル情報を更新します。 cron ファイルでスケジュールがどのように機能するかを見てみましょう。
新しいcrontabファイル
sudo crontab -e
と入力して編集するか、-l と入力して内容を一覧表示します。これが私の Twixxr cron ファイルです:
$ 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 プログラミングガイド: Cron サービスの実行方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。