문제

사람들은 어떻게 cronjob을 프로덕션에 배포/버전 제어합니까?저는 특정 솔루션보다 사람들이 사용하는 규칙/표준이 더 궁금합니다. 하지만 개정 제어를 위해 git을 사용하고 있고 cronjob은 python/django 스크립트를 실행하고 있습니다.

도움이 되었습니까?

해결책

사용중인 경우 구조 Deploment의 경우 Crontab을 편집하는 함수를 추가 할 수 있습니다.

def add_cronjob():
    run('crontab -l > /tmp/crondump')             
    run('echo "@daily /path/to/dostuff.sh 2> /dev/null" >> /tmp/crondump')
    run('crontab /tmp/crondump')

이것은 당신의 crontab에 직업을 추가 할 것입니다 (면책 조항 : 완전히 테스트되지 않았으며 그다지 묘사되지는 않습니다).

  1. Crontab을 온도에 저장하십시오.

  2. TMPFile에 라인을 추가하십시오.

  3. Crontab을 다시 작성하십시오.

이것은 아마도 당신이하고 싶은 일이 아니라, 그 라인을 따라 crontab을 git로 확인하고 모든 배포 할 때 서버에서 덮어 쓰는 것에 대해 생각할 수 있습니다. (프로젝트를위한 전용 사용자가있는 경우).

다른 팁

직물을 사용하여 Crontab의 깨끗한 버전을 로컬에서 유지하는 것을 선호합니다. 그렇게하면 생산에 무엇이 있는지 정확히 알 수 있으며 항목을 추가하는 것 외에도 쉽게 항목을 편집 할 수 있습니다.

내가 사용하는 패브릭 스크립트는 이와 같은 것 같습니다 (일부 코드는 백업을 처리하는 코드가 편집 됨) :

def deploy_crontab():
    put('crontab', '/tmp/crontab')
    sudo('crontab < /tmp/crontab')

다음을 살펴볼 수도 있습니다.

http://django-fab-deploy.readthedocs.org/en/0.7.5/_modules/fab_deploy/crontab.html#crontab_update

django-fab deploy 모듈에는 crontab_set 및 crontab_update를 포함한 여러 가지 편리한 스크립트가 있습니다.

CFENGINE/Chef와 같은 배포를 위해 사용할 수 있습니다 (CRON 작업을 포함하여 모든 것을 배포 할 수 있습니다).

그러나이 질문을한다면 - 많은 생산 서버가 각각 많은 예정된 작업을 실행할 수 있습니다. 이 경우 작업을 배치 할 수있을뿐만 아니라 성공 실패를 추적 할 수있는 도구를 원할 것입니다. 마지막 실행에서 로그를 쉽게보고 통계를 실행하고 많은 작업에 대한 일정을 쉽게 변경하고 쉽게 변경할 수 있습니다. 한 번에 서버 (계획된 유지 보수로 인해 ...) 등

"UC4"라는 상업적 도구를 사용합니다. 나는 그것을 정말로 추천하지 않기 때문에 같은 문제를 해결할 수있는 더 나은 프로그램을 찾을 수 있기를 바랍니다. 나는 당신이 일자리를 배치 할 때 일자리를 관리하는 것이 끝나지 않는다고 말하고 있습니다.

시스템을 CFENGINE/PUPPET과 같은 구성 관리 시스템에 연결할 수없는 경우 Crontab을 수동으로 배포하는 3 가지 옵션이 있습니다.

당신은 단순히 사용할 수 있습니다 Crontab -u 사용자 -e 그러나 복사/페이스트에 오류가 발생할 위험이 있습니다.

파일을 Cron 디렉토리에 복사 할 수도 있지만 파일에 대한 구문 확인이없고 Linux에서는 실행해야합니다. 터치/var/spool/cron Crond가 변경 사항을 픽업하기 위해.

메모 모든 사람은 어느 시점에서 터치 명령을 잊을 것입니다.

내 경험상이 방법은 내가 가장 좋아하는 수동 방법입니다.

diff /var/spool/cron/<user> /var/tmp/<user>.new
crontab -u <user> /var/tmp/<user>.new

버전 제어 파일과 일관성을 유지하는 데 도움이되는 복사/페이스트 오류의 위험을 실행하지 않기 때문에 위에서 언급 한 방법이 가장 좋다고 생각합니다. 파일 내부의 CRON 작업에 대한 구문 확인을 수행하며 파일을 간단히 복사 할 때와 같이 터치 명령을 수행 할 필요가 없습니다.

django를 사용하는 경우 Django-Command-Extensions의 작업 시스템.

이점은 버전 제어를 통해 프로젝트 구조 내부에 작업을 유지하고 파이썬으로 모든 것을 작성하고 Crontab을 한 번만 구성 할 수 있다는 것입니다.

나는 사용한다 빌드 아웃 Django 프로젝트를 관리합니다. Buildout과 함께 사용합니다 z3c.recipe.usercrontab 배포 또는 업데이트에 CRON 작업을 설치합니다.

나는 crontab.txt를 포함하여 프로젝트를 버전 관리하는 것을 선호합니다.그런 다음 구조, 다음과 같이 간단합니다.

@task
def crontab():
    run('crontab deployment/crontab.txt')

그러면 다음 내용이 설치됩니다. deployment/crontab.txt 서버에 연결하는 사용자의 crontab에.서버에 전체 프로젝트가 없으면 다음을 수행하고 싶을 것입니다. put 먼저 crontab 파일을 확인하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top