해당 프로젝트는 지금은 alpha 버전이라고 한다. 제대로된 기능들이 들어가기 시작하면 좋아질듯. 그리고 그때쯤되면 간단한 소개가 아닌 사용법에 대해서 작성해둬야겠다.

우선은 Readme 파일 번역 수준

기능

가장 중요하다. 기능!

  • Crontab” 을 YAML로 작성이 가능하다.
  • 솔직히 YAML이 편한지는 모르겠다.
  • cron job이 실패에 대한 부분을 제어할 수 있게 되어있다.
  • 실패시 해당 값을 재시도 할 수 있다.
  • 유연하게 구성 가능
  • Docker, Kubernetes, 12 factor environments에 맞게 디자인이 되었다며…

설치

  • python >= 3.5
  • pip install yacron

사용

1
yacron -c my-crontab.yaml

-c를 사용해서 구성파일이 있는 곳을 가리킨다.

기본 구성

  • 매 5분마다 echo "foobar"를 실행하는 job.
1
2
3
4
5
jobs:
  - name: test-01
    command: echo "foobar"
    shell: /bin/bash
    schedule: "*/5 * * * *"
  • 특정일 (2017/7/19)에만 5분마다 echo "foobar"를 실행하는 job.
1
2
3
4
5
6
7
8
9
jobs:
  - name: test-01
    command: echo "foobar"
    schedule:
      minute: "*/5"
      dayOfMonth: 19
      month: 7
      year: 2017
      dayOfWeek: "*"
  • 특정 환경변수 값 설정
1
2
3
4
5
6
7
8
jobs:
  - name: test-01
    command: echo "foobar"
    shell: /bin/bash
    schedule: "*/5 * * * *"
    environment:
      - key: PATH
        value: /bin:/usr/bin

기본 값 지정

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
defaults:
    environment:
      - key: PATH
        value: /bin:/usr/bin
    shell: /bin/bash
jobs:
  - name: test-01
    command: echo "foobar"  # run /bin/bash
    schedule: "*/5 * * * *"
  - name: test-02
    command: echo "zbr"  # run /bin/sh
    shell: /bin/sh
    schedule: "*/5 * * * *"

리포트

  • job 이 실패했을때 알려준다. Sentry는 나중에 추가될 꺼임.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
- name: test-01
  command: |
    echo "hello" 1>&2
    sleep 1
    exit 10
  schedule:
    minute: "*/2"
  captureStderr: true
  onFailure:
    report:
      sentry:
        dsn:
          value: example
      mail:
        from: [email protected]
        to: [email protected]
        smtp_host: 127.0.0.1

onFailure 부분이 job 실패시 작어하는 부분임.
captureStderr: true 부분은 stderr로 출력되는 데이터를 잡겠다는거 반대로는 captureStdout: true 가 있다.

  • job 이 성공했을 경우, 알림은 onSuccess 옵션을 추가한다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
- name: test-01
  command: echo "hello world"
  schedule:
    minute: "*/2"
  captureStdout: true
  onSuccess:
    report:
      mail:
        from: [email protected]
        to: [email protected]
        smtp_host: 127.0.0.1

failure 제어

  • 실패 조건
  • producesStdout
    • default: false
    • stdout 출력이 있을 경우
  • producesStderr
    • default: true
    • stderr 출력이 있을 경우
  • nonzeroReturn
    • default: true
    • 반환값이 0이 아닌경우
1
2
3
4
failsWhen:
  producesStdout: false
  producesStderr: true
  nonzeroReturn: true
  • retry

onFailure 안에다가 추가한다. 그리고 job 재시도도 완전히 실패했다면, onPermanentFailure 옵션을 사용하여 리포트를 받는다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- name: test-01
  command: |
    echo "hello" 1>&2
    sleep 1
    exit 10
  schedule:
    minute: "*/10"
  captureStderr: true
  onFailure:
    report:
      mail:
        from: [email protected]
        to: [email protected]
        smtp_host: 127.0.0.1
    retry:
      maximumRetries: 10
      initialDelay: 1
      maximumDelay: 30
      backoffMultiplier: 2
  onPermanentFailure:
    report:
      mail:
        from: [email protected]
        to: [email protected]
        smtp_host: 127.0.0.1