Linux 인스턴스에서 Cron 작업 실행 - AWS OpsWorks

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Linux 인스턴스에서 Cron 작업 실행

중요

더 AWS OpsWorks Stacks 서비스 수명이 2024년 5월 26일에 종료되었으며 신규 및 기존 고객 모두 사용할 수 없습니다. 고객은 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션할 것을 강력히 권장합니다. 마이그레이션에 대해 궁금한 점이 있으면 다음 연락처로 문의하십시오. AWS Support 팀 구성: AWS re:포스트 포스트 또는 스루 AWS 프리미엄 지원.

Linux cron 작업은 cron 데몬이 지정된 일정으로 하나 이상의 명령을 실행하도록 지시합니다. 예를 들어 스택이 PHP 전자 상거래 애플리케이션을 지원한다고 가정해 보겠습니다. 서버가 매주 지정된 시간에 판매 보고서를 전송하도록 cron 작업을 설정할 수 있습니다. Cron에 대한 자세한 내용은 Wikipedia에서 cron을 참조하세요. Linux 기반 컴퓨터 또는 인스턴스에서 cron을 직접 실행하는 방법에 대한 자세한 정보는 Indiana University 지식 기반 웹 사이트에서 What are cron and crontab, and how do I use them? 단원을 참조하세요.

개별 Linux 기반 인스턴스에 연결하고 해당 crontab 항목을 편집하여 개별 Linux 기반 인스턴스에 수동으로 cron 작업을 설정할 수 있지만SSH, 이는 다음과 같은 주요 이점입니다. AWS OpsWorks 스택은 전체 인스턴스 계층에서 작업을 실행하도록 지시할 수 있다는 것입니다. 다음 절차는 PHP App Server 계층의 인스턴스에서 cron 작업을 설정하는 방법을 설명하지만 모든 계층에서 동일한 접근 방식을 사용할 수 있습니다.

계층의 인스턴스에 대한 cron 작업을 설정하려면
  1. 이 작업을 설정하는 cron 리소스가 포함된 레시피를 사용하여 쿡북을 구현합니다. 이 예제에서는 레시피의 이름이 cronjob.rb라고 가정하고, 자세한 구현 정보는 뒤에서 설명합니다. 쿡북 및 레시피에 대한 자세한 내용은 쿡북과 레시피 단원을 참조하세요.

  2. 스택에 쿡북을 설치합니다. 자세한 내용은 사용자 지정 쿡북 설치 단원을 참조하십시오.

  3. 가지고 있습니다. AWS OpsWorks 스택은 다음 라이프사이클 이벤트에 레시피를 할당하여 레이어 인스턴스에서 레시피를 자동으로 실행합니다. 자세한 내용은 자동으로 레시피 실행 단원을 참조하십시오.

    • 설정 — 이 이벤트에 할당하면 지시문이 cronjob.rb 전달됩니다. AWS OpsWorks 모든 새 인스턴스에서 레시피를 실행하기 위한 스택입니다.

    • 배포 — 이 이벤트에 할당하면 지시문이 cronjob.rb 전달됩니다. AWS OpsWorks 앱을 레이어에 배포하거나 재배포할 때 모든 온라인 인스턴스에서 레시피를 실행하기 위한 스택입니다.

    Execute Recipes 스택 명령을 사용하여 온라인 인스턴스에서 레시피를 수동으로 실행할 수도 있습니다. 자세한 내용은 스택 명령 실행 단원을 참조하십시오.

다음은 서버에서 판매 데이터를 수집하여 보고서를 우편으로 보내는 사용자 구현 PHP 애플리케이션을 일주일에 한 번 실행하도록 cron 작업을 설정하는 cronjob.rb 예제입니다. Cron 리소스를 사용하는 방법의 추가 예제는 cron을 참조하세요.

cron "job_name" do hour "1" minute "10" weekday "6" command "cd /srv/www/myapp/current && php .lib/mailing.php" end

croncron 작업을 나타내는 Chef 리소스입니다. 일시 AWS OpsWorks Stacks는 인스턴스에서 레시피를 실행하고, 관련 제공자는 작업 설정의 세부 정보를 처리합니다.

  • job_namecron 작업의 사용자 정의 이름입니다(예: weekly report).

  • hour/minute/weekday는 명령을 실행할 시점을 지정합니다. 이 예제는 명령을 매주 토요일 오전 1시 10분에 실행합니다.

  • command는 실행할 명령을 지정합니다.

    이 예제는 2개의 명령을 실행합니다. 첫 번째 명령은 /srv/www/myapp/current 디렉터리로 이동합니다. 두 번째 명령은 판매 데이터를 수집하고 보고서를 전송하는 사용자 구현 mailing.php 애플리케이션을 실행합니다.

참고

bundle 명령은 기본적으로 cron 작업에 사용되지 않습니다. 그 이유는 AWS OpsWorks Stacks는 디렉토리에 번들러를 설치합니다. /usr/local/bin bundle 작업에서 cron을 사용하려면 명시적으로 /usr/local/bin 경로를 cron 작업에 추가해야 합니다. 또한 $ PATH 환경 변수는 cron 작업 중에 확장되지 않을 수 있으므로 $ 변수 확장에 의존하지 않고 작업에 필요한 경로 정보를 명시적으로 추가하는 것이 가장 좋습니다. PATH 다음 예제는 cron 작업에서 bundle을 사용하는 두 가지 방법을 보여줍니다.

cron "my first task" do path "/usr/local/bin" minute "*/10" command "cd /srv/www/myapp/current && bundle exec my_command" end
cron_env = {"PATH" => "/usr/local/bin"} cron "my second task" do environment cron_env minute "*/10" command "cd /srv/www/myapp/current && /usr/local/bin/bundle exec my_command" end

스택에 애플리케이션 서버가 여러 개 있는 경우 PHP App Server 계층의 수명 주기 이벤트를 cronjob.rb 할당하는 것은 이상적인 방법이 아닐 수 있습니다. 예를 들어 레시피가 계층의 모든 인스턴스에서 실행되므로 여러 보고서가 전송됩니다. 이보다 나은 접근 방식은 사용자 지정 계층을 사용하여 한 서버만 보고서를 전송하도록 하는 것입니다.

계층의 인스턴스 중 하나에서만 레시피를 실행하려면
  1. 예를 들어, 라는 사용자 지정 cronjob.rb 계층을 만들고 해당 설치 PHPAdmin 및 배포 이벤트에 할당하십시오. 사용자 지정 계층에서 반드시 많은 레시피를 실행할 필요는 없습니다. 이 경우에는 인스턴스에서 사용자 지정 레시피 PHPAdmin 하나만 실행하면 됩니다.

  2. PHPApp Server 인스턴스 중 하나를 에 AdminLayer 할당하십시오. 인스턴스가 두 개 이상의 레이어에 속하는 경우 AWS OpsWorks 스택은 각 레이어의 빌트인 레시피와 사용자 지정 레시피를 실행합니다.

PHPApp Server 및 PHPAdmin 계층에는 하나의 인스턴스만 속하므로 해당 인스턴스에서만 cronjob.rb 실행되고 보고서는 하나만 수신됩니다.