> 백엔드 개발 > PHP 튜토리얼 > Yii2 프로그래밍 가이드: Cron 서비스 실행 방법

Yii2 프로그래밍 가이드: Cron 서비스 실행 방법

WBOY
풀어 주다: 2023-09-02 06:00:01
원래의
1047명이 탐색했습니다.

Yii2 프로그래밍 가이드: Cron 서비스 실행 방법

"Yii가 무엇인가요?"라고 묻는다면 이전 튜토리얼을 확인하세요. Yii 프레임워크 소개, Yii의 이점을 검토하고 2014년 10월에 출시된 Yii 2.0의 새로운 기능을 간략하게 설명합니다. 흠>

이 Yii2 프로그래밍 시리즈에서는 독자들에게 Yii2 PHP 프레임워크 사용 방법을 안내할 것입니다. 오늘 튜토리얼에서는 Yii의 콘솔 기능을 활용하여 크론 작업을 실행하는 방법을 공유하겠습니다.

과거에는 크론 작업에서 웹 액세스 가능 URL인 wget을 사용하여 백그라운드 작업을 실행했습니다. 이로 인해 보안 문제가 발생하고 일부 성능 문제가 발생합니다. 부트 시리즈 보안 기능의 위험을 완화하는 몇 가지 방법을 논의하는 동안 콘솔 기반 명령으로 전환하고 싶었습니다. Yii2를 사용하면 이는 매우 간단합니다.

오늘의 예에서는 이 Twitter API 에피소드에서 설명하는 Twixxr 사이트의 콘솔 기반 cron 명령을 시연하겠습니다. 속도 제한 및 성능 관리 문제로 인해 Twitter API는 효율적이고 안정적인 크론 작업에 크게 의존합니다. 그래서 이것은 여러분과 공유할 수 있는 훌륭한 예입니다.

시작하기 전에 다시 한 번 말씀드리고 싶습니다. 여러분의 아이디어와 피드백에 항상 감사드립니다. 질문이나 주제 제안이 있는 경우 아래 댓글에 의견을 게시해 주세요. Twitter @reifman을 통해 저에게 직접 연락하실 수도 있습니다.

크론이란 무엇인가요?

Wikipedia에서는 cron을 "Unix 계열 컴퓨터 운영 체제의 시간 기반 작업 스케줄러"라고 설명합니다. 이것은 매우 정확합니다. 기본적으로 cron은 로그 관리 및 백업부터 API 요청, 데이터베이스 정리에 이르기까지 웹 서비스를 실행하는 데 필요한 모든 백그라운드 작업을 실행합니다.

서버의 기존 크론 작업을 보려면 일반적으로 sudo crontab -l를 입력하면 다음과 같은 내용이 표시됩니다.

으아악

왼쪽에서 이러한 작업을 3~15분마다 또는 매일 자정 등에 활성화하도록 지정하고 오른쪽에는 실행할 스크립트가 있습니다. 참조Cron 작업(Envato Tuts+)을 사용하여 작업 예약.

Let's Encrypt 스크립트는 고유한 콘솔 명령이라는 점에 유의하세요. 이는 우리 서버의 명령줄에서 실행됩니다. 그러나 위의 모든 회의 일정 작업은 wget을 통해 실행됩니다. 이는 백그라운드 작업을 수행하는 웹 애플리케이션에 대해 특정 시간에 웹 브라우저에서 요청을 실행하는 봇과 같습니다.

외부 웹 요청에 필요한 오버헤드와 서버의 스크립트에 대한 시간 제한 제약 외에도 이러한 액세스 포인트도 보호해야 합니다. 다음은 회의 기획자가 이를 수행할 수 있는 방법의 예입니다.

으아악

사용자가 관리자로 로그인했는지, 동일한 인터넷 IP 주소를 사용하는 서버에서 로컬로 실행 중인지 확인합니다.

콘솔 기반 Cron 명령 구현

Alex Makarov는 Yii 프레임워크에서 작업하는 주요 자원봉사자 중 한 명이며 제가 Envato Tuts+ 프레임워크에 대해 정기적으로 글을 쓸 때 제 질문에 답변하는 데 도움을 줍니다. 내 보안 사건을 읽은 후 그는 크론 작업을 실행하는 데 Yii2의 기본 콘솔 기능을 사용하지 않는 이유를 물었습니다. 기본적으로 나는 모른다.

/frontend/controllers/DaemonController.php가 있는 것처럼 /console/controllers/DaemonController.php를 만들었습니다. 이 튜토리얼에서는 더 작고 간단한 Twixxr 웹 서비스에 대해 이 작업을 수행하겠습니다.

저는 콘솔을 사용하여 데이터베이스 마이그레이션(예: ./yii migrate/up 7)을 실행하는 데 익숙하지만 그게 전부입니다. 백그라운드 작업을 수행하는 데 사용해 보고 싶습니다.

이전 튜토리얼에서 쓴 것처럼, 저의 초기 웹사이트인 Twixxr에는 여성 소유의 인플루언서 Twitter 계정과 교류하려는 모든 사용자 요청을 충족시키기 위해 API 호출을 정기적으로 교체하기 위해 많은 백그라운드 프로세스가 필요했습니다.

홈페이지는 다음과 같습니다

Yii2 프로그래밍 가이드: Cron 서비스 실행 방법

그래서 저는 Twixxr이 콘솔 기반 cron 컨트롤러를 실행하기 위한 좋은 테스트 플랫폼이 될 것이라고 생각했습니다.

새로운 DaemonController.php

이것은 나의 새로운 콘솔 기반 DaemonController.php의 핵심입니다:

으아악

내 프런트 엔드 기반 컨트롤러와 구조가 매우 유사하지만 /console 트리에 있으므로 네트워크를 통해 안전하게 액세스할 수 없습니다. Apache 웹 서버 사이트가 이 영역을 검색하도록 구성되어 있지 않습니다.

위의 예에서 actionFrequent() 将每两到三分钟调用一次。它处理另一组 Twixxr 友谊请求。另一方面,actionQuarter()는 15분마다 호출되어 브라우징 계정의 프로필 정보를 업데이트합니다. cron 파일에서 예약이 어떻게 작동하는지 살펴보겠습니다.

새 크론탭 파일

기본적으로 내 crontab 파일에서 Let's Encrypt 갱신에 대해 위에 표시된 대로 wget을 직접 Linux 스크립트로 대체했습니다.

내용을 나열하려면 sudo crontab -e 进行编辑,或输入 -l를 입력하세요. 내 Twixxr 크론 파일은 다음과 같습니다.

$ 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,其中提到的示例网络服务

위 내용은 Yii2 프로그래밍 가이드: Cron 서비스 실행 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿