"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 주소를 사용하는 서버에서 로컬로 실행 중인지 확인합니다.
Alex Makarov는 Yii 프레임워크에서 작업하는 주요 자원봉사자 중 한 명이며 제가 Envato Tuts+ 프레임워크에 대해 정기적으로 글을 쓸 때 제 질문에 답변하는 데 도움을 줍니다. 내 보안 사건을 읽은 후 그는 크론 작업을 실행하는 데 Yii2의 기본 콘솔 기능을 사용하지 않는 이유를 물었습니다. 기본적으로 나는 모른다.
/frontend/controllers/DaemonController.php가 있는 것처럼 /console/controllers/DaemonController.php를 만들었습니다. 이 튜토리얼에서는 더 작고 간단한 Twixxr 웹 서비스에 대해 이 작업을 수행하겠습니다.
저는 콘솔을 사용하여 데이터베이스 마이그레이션(예: ./yii migrate/up 7
)을 실행하는 데 익숙하지만 그게 전부입니다. 백그라운드 작업을 수행하는 데 사용해 보고 싶습니다.
이전 튜토리얼에서 쓴 것처럼, 저의 초기 웹사이트인 Twixxr에는 여성 소유의 인플루언서 Twitter 계정과 교류하려는 모든 사용자 요청을 충족시키기 위해 API 호출을 정기적으로 교체하기 위해 많은 백그라운드 프로세스가 필요했습니다.
홈페이지는 다음과 같습니다
그래서 저는 Twixxr이 콘솔 기반 cron 컨트롤러를 실행하기 위한 좋은 테스트 플랫폼이 될 것이라고 생각했습니다.
이것은 나의 새로운 콘솔 기반 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 프로그래밍 가이드: Cron 서비스 실행 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!