2012-05-10 3 views
5

현재 시스템에서 크론 작업을 설정하고 편집하기위한 인터페이스로 좋은 스케줄러 시스템을 구축하려고합니다. 내 시스템은 Linux 서버에서 Zend 프레임 워크 1.11.11을 사용하여 빌드됩니다.크론 작업 스케줄러 빌드

나는 대한 제안을하고자이 주요 문제가 :

문제 1 :

    : 응용 프로그램 자체

    의 설정을 나는 cron 작업을 실행하는 2 가지 방법이 있습니다

  1. 첫 번째 방법은 폴더 scripts을 만들고 거기에 필요한 리소스 만로드 할 공통 부트 스트랩 파일을 만드는 것입니다. 그런 다음 각 작업마다 별도의 스크립트를 만들고 각 스크립트에 부트 스트랩 파일을 포함시킵니다. 마지막으로 crontab 파일에 각각의 스크립트에 대한 cron 작업을 추가하면 작업은 ***** php /path/to/scripts/folder/cronScript_1.php과 같습니다.

  2. 두 번째로 cron 작업을 일반적인 요청처럼 처리합니다 (특별한 부트 스트랩 없음). 이 스크립트들 각각에 대해 crontab 파일에 cron 작업을 추가하면 작업은 ***** curl http://www.mydomain.com/module/controller/action과 같습니다.

문제 2 : 크론도 2 가지 방법으로 수행 할 수있는 작업 추가 응용 프로그램

의 인터페이스 : 각 작업에 대한

  1. 은에 항목이있을 것 crontab 파일. 새로운 작업을 추가하고 싶다면 cPanel이나 다른 방법으로 crontab을 편집해야합니다 (사용할 수 없을 수도 있음).

  2. 데이터베이스에 작업을 저장하고 데이터베이스와 상호 작용할 수있는 UI (작업 및 구성을 추가하기위한 그리드)를 제공하십시오. 그 후 1 분마다 실행되는 crontab 파일에 1 개의 cron 작업 만 작성하십시오. 이 작업은 데이터베이스에서 모든 작업을 선택하고 현재 실행해야하는 작업이 있는지 확인합니다 (작업 시간이 저장되어 서버의 현재 시간과 비교됩니다). 각 부분에 대한 구현하는 더 나은 방법 당신의 의견에


? 거기에 일반적으로 더 나은 준비가 솔루션이 있나요 ??

참고

나는 준비가 만든 솔루션을 찾고 Quartz 의지를 가로 질러왔다. 이게 내가 찾고있는거야 아니면 전혀 다른거야?

감사합니다.

+0

쿼츠는 자바 용이므로 젠드 프레임 워크와 통합하는 것이 쉬운 일은 아니라고 생각합니다. – Zombaya

답변

4

내 의견이지만, 개인적으로 모두 1 & 2가 스크립트의 의도에 달려 있습니다. 예를 들어,/etc/crontab을보기가 정말 쉬워지고 일들이 실행될 때를 한눈에 볼 수 있기 때문에 대부분 cron 항목을 모두 1로 사용합니다. 그러나 스크립트 내의 로직이 정확한 순간에 무엇을 실행할 것인지 파악하기 때문에 매분마다 스크립트를 호출해야하는 경우가 있습니다. (즉,지속적으로 처리해야하는 수백만 명의 사용자가 있으므로 매시간 사용자가 수행해야 할 작업 수식이 있습니다.

Gearman (http://gearman.org/)을 살펴보십시오. 한 머신에서 cron 스크립트를 실행하여 작은 비트로 작업을 분할하고 처리하기 위해 다른 비트로 비트를 집어 넣을 수 있습니다. 당신은 당신이지도를 얼마나 멀리 가져 가고 싶은지/그것의 측면을 줄이기위한 완전한 통제권을가집니다. 그것은 우리를 엄청나게 도와 주었고 수 분의 알고리즘 스크립트를 분당 처리 할 수있게 해줍니다. 우리가 더 많은 힘을 필요로한다면 우리는 더 많은 "일하는 사람"노드를 회전시키고 Gearman은 자동으로 그것들을 탐지하고 사용합니다.

우리는 현재 명령 줄에서 모든 작업을 수행하므로 cPanel, Plesk 등을 사용하지 않습니다. 따라서 백엔드 중 하나에서 crontab을 편집하는 것과 같은 것을 증명할 수는 없습니다. 한 사람을 팀의 crontab "게이트 키퍼"로 생각하는 것이 좋습니다. 예상 crontab 항목을 프로젝트 코드의 웹 액세스 불가능 폴더에 던집니다. 그런 다음 파일에 대한 변경 사항이 버전 제어에 푸시 될 때마다 해당 사용자는 해당 시스템으로 SSH를 보내고 변경해야합니다. 나는 내부 구조를 확신 할 수 없기 때문에 이것이 가능할 수도 있고 그렇지 않을 수도 있지만, crontab이 스크립트를 실행할 방법을 개발자가 볼 수있는 것이 좋습니다.

+1

+1 자세한 답변을 주셔서 감사합니다 :) Gearman을 확실히 들여다 봅니다! 그래도 질문이 있습니다. 서버를 원하는대로 조작 할 수있는 공유 호스팅을 사용하지 않고 프로젝트를 수행하면 어떨까요? Gearman이 좋은 솔루션이 될 것인가, 아니면 내 애플리케이션 내에 맞춤형 시스템을 구축해야 할 것인가? – Songo

+0

@Songo 필자는 자체 하드웨어 또는 루트 액세스 권한이있는 전용 서버에서만 구현했습니다. 루트 액세스 권한이 없으면 공유 환경에서 사용할 수 있다고 생각하지 않습니다. –

0

의 경우 문제 2 : 응용 프로그램의 인터페이스 두 방법 모두 1 &을 사용했습니다. 2. 두 번째 방법을 강력히 권장합니다. 데이터베이스 테이블을 만들고 UI를 구축하는 데 훨씬 더 많은 초기 작업이 필요합니다. 장기적으로 볼 때 새로운 일자리를 추가하는 것이 훨씬 쉬워 질 것입니다. 현재 회사의 UI를 구축하기 때문에 비 기술적 인 사람들 (회계사, 창고 관리자)이 들어가서 일자리를 창출 할 수 있으므로 사용하기가 쉽습니다.

루트로 서버에 로그온하는 것보다 crontab을 편집하고 패턴을 기억하고 저장하는 것보다 훨씬 쉽습니다. 게다가 당신은 crontab에 뭔가를 추가하고 싶을 때마다 누구나 오는 "crontab guy"로 알려지지 않을 것입니다.

응용 프로그램 자체 설정에 관해서는 cron이 하나의 스크립트를 호출하고 나머지는 그 스크립트를 실행하게해야합니다. 그렇게하면 1 cron 항목 만 필요합니다. 작업을 실행하는 데 시간이 오래 걸리면 실행중인 다른 인스턴스가없는 경우에만 스크립트가 실행되기 시작하는지 확인해야합니다. 그렇지 않으면 동일한 작업이 두 번 실행될 수 있습니다.