크론이란 무엇입니까?
Cron은 Linux 및 MacOS 운영 체제에서 사용할 수 있는 작업 스케줄링 시스템입니다.
모든 프로그램을 실행하는 데 사용할 수 있습니다. 언제든지.
여기에는 Ruby 코드가 포함됩니다!
특정 반복 작업이 있는 경우 매일, 매주 또는 매시간 자동으로 실행하려는 경우 Cron이 원하는 것일 수 있습니다.
작업의 예는 다음과 같습니다. :
- 주간 데이터베이스 백업 실행
- 웹사이트 활동에 대한 일일 보고서 생성
- 알림 이메일 보내기
cron이 어떻게 작동하는지 알아봅시다!
크론의 기본
모든 사용자는 실행하려는 작업을 정의하는 cron 파일을 가질 수 있습니다.
crontab -e
를 사용하여 이 파일을 편집할 수 있습니다. 명령.
또는 crontab -l
을 사용하여 예약된 작업을 나열합니다. .
크론 작업의 예 :
0 0 * * * /opt/rubies/ruby-2.5.1/bin/rake db:backup
구문이 약간 까다로울 수 있으며 항상 수동으로 이러한 파일을 편집하고 싶지 않을 수 있습니다.
일을 더 쉽게 만들어 줄 보석이 있습니까?
네!
언제든 젬 사용 방법
cron 구문은 기억하기 어려울 수 있으므로 whenever
와 같은 gem을 사용할 수 있습니다. .
이 보석은 Ruby에서 cron 작업을 정의하는 데 도움이 됩니다. .
먼저 gem을 설치하세요.
그런 다음 구성 파일을 만듭니다. :
wheneverize . # [add] config/schedule.rb
열어보세요.
주석 처리된 몇 가지 예가 표시되며 원하는 경우 삭제하십시오.
매시간 실행되는 백업 작업을 원한다고 가정해 보겠습니다.
"config/schedule.rb" 파일 안에 이것을 작성하세요. :
every 1.hour do rake "db:backup" end
옵션 포함 :
- rake(현재 프로젝트에 정의된 rake 작업을 시작합니다.
db:backup
기본적으로 정의되어 있지 않지만db:version
을 시도할 수 있습니다. ) - runner(
Archive.backup_now
와 같은 Ruby 클래스 + 메소드) ) - 명령(시스템 명령)
지금 :
whenever --update-crontab
실행 cron 항목을 생성하는 명령입니다.
crontab -l
을 사용하여 새 항목을 볼 수 있어야 합니다. .
이것이 내가 얻은 것입니다. :
0 * * * * /bin/bash -l -c 'cd /home/jesus/testing && RAILS_ENV=production bundle exec rake db:backup --silent'
작업이 production
에서 실행됩니다. 모드.
변경하시겠습니까?
이 설정을 사용할 수 있습니다. :
set :environment, "development"
이것은 schedule.rb
에 들어갑니다. 파일, 상단에 있습니다.
이 명령을 사용할 수도 있습니다. :
whenever --update-crontab --set environment=development
이 명령을 실행할 때 환경으로 "개발"이 있는 모든 작업이 생성됩니다.
언제든지 더 많은 예
이 예는 어떻게 더 구체적일 수 있는지 보여줍니다.
주간 작업 :
every :monday, at: "6:00 PM" do runner "Mail.send_weekly_newsletter" end
이 예는 하루 동안 동일한 작업을 여러 번 실행하는 방법을 보여줍니다.
하루에 두 번 작업 실행 :
every :day, at: ["12:00 AM", "12:00 PM"] do command "rm tmp/testing.txt" end
보석 로깅 및 문제 해결 시마다
crontab 파일에 작업이 있으면 ( crontab -l
로 확인하십시오. ) 준비가 되었습니다.
다음:
예약된 작업이 올바르게 작동하는지 어떻게 알 수 있나요?
로깅을 설정하고 출력을 읽을 수 있습니다.
schedule.rb
상단에 이것을 추가하여 로깅을 활성화하십시오. 파일.
구성 :
set :output, "log/cron.log"
whenever --update-crontab
을 실행할 때마다 실행하는 것을 잊지 마십시오. 변경할 때마다 명령하세요!
로그 파일이 아직 비어 있습니까?
어떤 일이 일어나려면 예정된 시간을 기다려야 합니다.
Btw, 로그에 이 오류가 표시되는 경우 :
/bin/bash: bundle: command not found
이는 cron이 귀하와 동일한 버전의 Ruby를 실행하지 않는다는 것을 의미합니다.
Ruby 버전 관리자를 사용하는 경우 :
.bash_profile
에서 로드해야 합니다. .bashrc
대신 파일 , cron 작업에서 사용할 수 있도록 합니다.
언제든지의 대안
잘 관리된 보석은 언제라도 훌륭하게 작동합니다.
그러나 대안은 무엇입니까?
목록은 다음과 같습니다. :
- Heroku Scheduler는 Heroku 사용자를 위한 무료 작업 일정 추가 기능입니다. cron만큼 유연하지는 않지만 작업을 완료합니다.
- Cron을 인메모리 스케줄러로 대체하는 Ruby gem인 Rufus Scheduler
- Sidecloq 및 Sidekiq-cron은 둘 다 Sidekiq에 반복 작업을 추가하는 Sidekiq 애드온입니다.
두 Sidekiq 애드온은 스케줄링을 위한 실제 cron 구문을 원하므로 when 구문만큼 좋지 않습니다.
좋은 점은 Sidekiq 웹 UI와 통합된다는 것입니다.
요약
Ruby에서 when gem을 사용하여 cron 작업을 예약하는 방법을 배웠습니다!
이 기사를 공유하여 더 많은 사람들이 혜택을 받을 수 있도록 하십시오.
읽어주셔서 감사합니다.