FlexGet을 주기적으로 자동실행하는 방법은 두가지가 있습니다. FlexGet이 백그라운드에 상주하면서 자체적으로 Scheduler를 가동 task를 실행하는 방법과 OS의 Scheduler(ex. Cron)를 통해서 FlexGet을 실행하는 것입니다. 저는 FlexGet을 상주시키는 방법을 사용하고 있는데, 설정 파일을 한 곳에서 관리할 수 있기 때문입니다. 이 글은 FlexGet 자체 Scheduler 플러그인을 사용하는 방법을 다루고 있습니다.

제 생각에는 이전 2개의 글과 더불어서 scheduler 플러그인 까지만 설정하면 아주 기초적임에도 불구하고 실 사용가능한 시드박스를 구축할 수 있을 것으로 기대합니다.
이전글 목록:
- FlexGet 설정파일 만들기 1 - 동작 확인을 할 수 있는 최소한의 설정 
- FlexGet 설정파일 만들기 2 - rss와 토렌트 클라이언트 (deluge) 연동하기 
- FlexGet 설정파일 만들기 2 - rss와 토렌트 클라이언트 (transmission) 연동하기


1. FlexGet을 램에 상주시키기 - Daemon Mode로 가동

FlexGet을 daemon mode로 가동하는 것은 윈도우즈의 서비스와 비슷한 개념입니다. 명령행 옵션은 아래와 같습니다.

1
/실행파일 위치/flexget daemon start
cs

참고로 종료와 재실행 명령은 아래와 같습니다.

1
2
/실행파일 위치/flexget daemon stop
/실행파일 위치/flexget daemon reload
cs

물론, 매번 부팅 시 마다 수동으로 FlexGet을 실행하는 것은 합리적이지 않습니다. 따라서 아래 링크의 글을 참조하여 부팅 시 자동실행 되도록 Systemd 서비스를 만들어줍니다.

- FlexGet 설치 및 자동실행 설정: http://notme.tistory.com/62



2. schedule 플러그인 설정: https://flexget.com/Plugins/Daemon/scheduler

FlexGet의 Schedule 플러그인을 이용합니다. 사용 방법은 cron과 거의 같네요. schedules 키워드는 FlexGet의 최상위 키워드로써 1열부터 바로 시작해야 합니다. 즉 다른 키워드의 구성요소로 사용할 수 없습니다.


아래 예시는 "a_tv"와 "b_tv" task(할 일)를 시간대별로 서로 다른 주기로 실행하도록 설정한 것입니다. INPUT(입력) 소스가 자주 갱신되는 오후 8시~새벽3시에는 15분 간격으로, 자료 갱신이 더딘 새벽3시~오후 8시에는 1시간 간격으로 "a_tv"와 "b_tv"를 실행합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
schedules:
  - tasks: [a_tv, b_tv]
    schedule:
      # 20시 이상 24시 미만에는 15분 간격으로 실행
      hour: 20-23
      minute: "*/15"
  - tasks: [a_tv, b_tv]
    schedule:
      hour: 0-2
      minute: "*/15"
  - tasks: [a_tv, b_tv]
    schedule:
      # 03시 이상 20시 미만에는 1시간 간격으로 실행
      hour: 3-19/1
cs
동일한 주기로 task를 추가할 경우에는 대괄호 안에 ,(쉼표)로 구분하여 task 이름을 추가로 써 주면 됩니다.

만약 완전히 다른 주기로 실행할 task를 추가하고 싶을 경우 아래 처럼 - tasks: 키워드를 더 써주면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
schedules:
  - tasks: [a_tv, b_tv]
    schedule:
      # 20시 이상 24시 미만에는 15분 간격으로 실행
      hour: 20-23
      minute: "*/15"
  - tasks: [a_tv, b_tv]
    schedule:
      hour: 0-2
      minute: "*/15"
  - tasks: [a_tv, b_tv]
    schedule:
      # 03시 이상 20시 미만에는 1시간 간격으로 실행
      hour: 3-19/1
    # c_series task는 하루 한 번 실행
  - tasks: c_series
    interval:
      days: 1
cs

이번에는 해당 스케줄에 단 하나의 task만 포함이 되었는데, 이 때는 대괄호가 필요 없습니다.

그런데 곰곰히 살펴보면 a_tv, b_tv와 c_series는 scheduler 구조가 좀 다른 것을 알 수 있습니다. 전자는 schedule 이라는 키워드를 사용했고, 후자는 interval 이라는 키워드를 사용했지요. schedule은 시각(시,분), 요일, 날짜를 이용하는 방식이고, interval을 주기만을 사용합니다. 두 방식에서 사용할 수 있는 필드는 아래와 같습니다.

- schedule 방식
year, month, day, hour, minute, week, day_of_week
대개는 hour, minute, day_of_week 정도만 사용하면 충분합니다. day_of_week은 요일인데, 세글자 영문 약어를 사용하거나 0(일요일)~6(토요일)의 숫자를 사용할 수 있습니다. (mon,tue,wed,thu,fri,sat,sun)

- interval 방식
weeks, days, hours, minutes

만약 모든 task를 15분 주기로 실행하고자 한다면 아래와 같이 아주 간단한 설정을 해주시면 됩니다.

1
2
3
4
schedules:
  - tasks: '*'
    interval:
      minutes: 15
cs



3. 마무리 - 혹시나 schedules 키워드의 위치 설명이 애매할까봐...

마지막으로 제가 작성한 FlexGet 설정파일 만들기 1편, 2편에 이어, scheuler 플러그인 까지 설정하셨다면 설정 파일 형태가 아래처럼 구성되었을껍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 스케줄러 플러그인
schedules:
  - tasks: '*'
    interval:
      minutes: 15
 
# 할 일 목록 정의
tasks:
  torrent_rss:
    # "입력"
    inputs:
      - rss: https://RSS피드 주소 1
      - rss: https://RSS피드 주소 2
    # "필터"
    regexp:
      accept:
        - '프로그램명1.*릴그룹'
              movedone: /media/모나코 방송/프로그램 1 디렉토리
        - '프로그램명2.*릴그룹'
              movedone: /media/팔라우 방송/프로그램 2 디렉토리
    # "출력"
    deluge:
      username: 'deluge RPC 계정'
      password: 'deluge RPC 암호'
cs

이렇게 제가 생각하는 FlexGet 설정파일의 최소 구성이 비로소 완성되었고, 이제 써 가면서 조금씩 배우고 개선해가면 되겠네요. 아마도 정규식 규칙을 조금 더 배운 후 set과 deluge (또는 transmission) 플러그인의 옵션을 한번 찾아보시면 좋을 것 같습니다.