FLexget使用记录

The Note of Using Flexget

  linkthis    2018-02-15    8061 words

Flexget可以根据配置自动下载种子,无需自己手动下载。

Flexget可以根据添加的RSS链接和配置文件,对种子进行有选择性的下载,不必自己再去种子站去搜索,不过需要注意的是,虽然FLexget本身支持Python2.7或者Python3.x(对Python3.6的支持从2.11.x版本开始,Python3.7可能存在一些小问题),建议使用Python3.3-3.6版本;但是如果你要使用Deluge,请注意Deluge目前支持Python2.7。

Flexget安装

执行如下命令确认安装的Python版本:

1
python -V

如果没有返回结果则执行如下命令安装Python:

1
apt install python2.7

或者

1
apt install python3.5

而Flexget可以通过pip或者setuptools安装,这里以pip安装为例子: 如果安装的为Python2.7则执行:

1
apt install python-pip

如果安装的为Python3.X则执行:

1
apt install python-pip3

之后执行:

1
pip installl flexget

或者

1
pip3 install flexget

如果你需要一个较为独立的运行环境或者对Python版本有特殊需要,可以使用virtualenv,不过需要注意的是如果要使用Deluge的插件,在建立virtualenv环境时应该加上参数--system-site-packages以便Flexget可以使用Deluge的包。
执行如下代码确认Flexget以确认是否安装成功:

1
flexget -V

Flexget Daemon运行

此方法可以保证Flexget一直运行在后台,按照配置文件执行任务。执行:

1
flexget daemon start [-d, --autoreload-config]

-d将使Flexget切换到后台运行。
--autoreload-config将在任务执行前强制重新加载配置,在较早的版本中,命令应该替换为--config-autoreload
其它的相关命令是:

1
2
3
flexget daemon stop
flexget daemon status
flexget daemon reload-config ##重新载入配置文件

在Flexget daemon运行的时候,你也可以执行flexget execute,不必担心并发使用会导致flexget execute因文件锁定而出现问题。

Flexget Config配置

注意配置文件时YAML格式,有严格的缩进要求,必须是两个空格的倍数,不能使用tab,每一个层级之间用两个空格缩进。注意Flexget不会自己主动创建配置文件,需要自己手动在对应文件夹内新建配置文件。书写配置文件的时候可以通过flexget --test execute或者flexget check进行检查。
Flexget有相当多的插件,可以实现极其个性化的配置,这里仅举出使用较多的几种。在使用这些插件时,你需要注意top-level keys,这些关键字均不需缩进。

Scheduler

注意此插件需要Flexget运行在Daemon模式下,同时需要注意的是由于Flexget自身的Bug,你在使用这个参数的时候可能会看见如下的报错:

1
2018-02-14 10:28 WARNING  manager    Config line XX is likely missing ':' at the end

不过你可以忽略这个报错,同时你也可以不用具体设置Schedule,因为其默认每个小时将每个task执行一次。
一般的写法如下:

1
2
3
4
schedules:
  - tasks: [list, of, tasks]
    interval:
      <weeks|days|hours|minutes>: <#>

task里面你可以使用*(匹配字符)或者?(匹配单个字符)。
在指定时间时,你可以只使用单个的参数,也可以使用复数的参数,由于其是同级的,所以不需要缩进两个空格,范例如下:

1
2
3
4
5
6
7
8
9
10
schedules:
  - tasks: [list, of, tasks]
    schedule:
      minute: X
      hour: X
      day: X
      day_of_week: X
      week: X
      month: X
      year: X

如果你想要执行更加精确的时间表,则可以参考以下的范例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
schedules:
  # 星期一时每个30分钟执行一次任务
  - tasks: [taskone, tasktwo]
    schedule:
      minute: "*/30"
      day_of_week: mon
  # 在22:05, 22:45, 23:05, 23:45时执行
  - tasks: task3
    schedule:
      minute: 5,45
      hour: 22,23
  # 在星期二和星期四12:00到17:00的时间段内每隔15分钟执行一次任务
  - tasks: task4
    schedule:
      day_of_week: tue,thu
      hour: 12-17
      minute: "*/15"
  # 从早8点到晚8点每隔两个小时执行一次任务
  - tasks: task5
    schedule:
      hour: 8-20/2

这些参数的写法与cron比较相似,更多的用法可以参看apscheduler文档。

Verify SSL Certificates

可以关闭任务的SSL证书验证,如果你的任务有https rss没有有效的证书。格式如下

1
verify_ssl_certificates: no

当然你需要知道忽略SSL证书验证所带来的风险,并且需要在使用此插件之前将Python版本升级到2.7.9及以上。

Content size

可以用来限制下载文件的大小,默认以严格模式运行,即无法确认大小就拒绝执行,同时此参数不支持磁力链接。范例如下:

1
2
3
4
content_size:
  min: 12
  max: 1200
  strict: no

文件大小的单位是Mib。

Free Space

如果指定的文件夹的剩余空间低于设定时将中止任务的执行。范例如下:

1
2
3
free_space:
  path: /location/to/monitor
  space: 500

空间大小的单位是MB。

Regexp

使用正则表达式来过滤条目。Flexget遵循Python Regexp格式,所有匹配都不区分大小写。
这里提供两个帮助创建正则表达式的方法:RegExr–try-regexp。 简单范例:

1
2
3
4
5
6
regexp:
  accept:
    - show name
  reject:
    - german
    - sweden

acceptreject可以单独使用。
完整语法规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
regexp:
  <operation>:
    - pattern 1
    - pattern 2: <custom path>
    - pattern 3:
        [not]:
          - pattern 4
        [path]: <custom path>
        [from]: <entry field> # 只对此方案生效
        [set]:
            <entry field>: <value>
  [rest]: <operation>
  [from]: <entry field> # 对所有方案生效

可以采用的参数有acceptrejectaccept_excludingreject_excluding。以上的所有参数可以自由组合。 一般而言,简单范例即可以满足需求,如果需要更详细的参数说明可以参考Regexp

参考配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
schedules:

  - tasks: [HDH]
    interval:
      minutes: 5

tasks:

  HDH:
    rss: http://example.com/
    verify_ssl_certificates: no
    accept_all: yes
    regexp:
      reject:
        - 极影
    content_size:
      min: 20480
      max: 512000
    download: /home/transmission/watch

Flexget的其它使用方法

使用Crontab定时运行

首先确定Flexget的绝对路径,执行命令:

1
which flexget

然后执行crontab -e添加任务:

1
*/5 * * * * /usr/local/bin/flexget -c /root/.flexget/config.yml execute

注意Flexget运行时会给系统带来较大负担,请不要将时间间隔设置得过短。

自动启动

注意以下所有操作均以root用户权限执行。
创建/etc/default/flexget文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Configuration for /etc/init.d/flexget

# User to run flexget as.
# Daemon will not start if left empty.
FGUSER=""

# Full path to the flexget config.yml file to use.
# Defaults to FGUSER $HOME/.flexget/config.yml
CONFIG=""

# Path to the directory where flexget should log. Do not add trailing slash.
# Defaults to the FGUSER $HOME/.flexget directory
LOG=""

# Log verbosity
# Available options : none critical error warning info verbose debug trace
# Defaults to info
LEVEL=""

创建/etc/init.d/flexget文件:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash

### BEGIN INIT INFO
# Provides:          flexget
# Required-Start:    $network $remote_fs
# Required-Stop:     $network $remote_fs
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Flexget
# Description:       FlexGet is a multipurpose automation tool
#                    for content like torrents, nzbs, podcasts,
#                    comics, series, movies, etc.
### END INIT INFO

# Author: Antoine Joubert, 19/01/2014

NAME="flexget"
DAEMON="/usr/local/bin/flexget"
SETTINGS="/etc/default/$NAME"

DESC="Flexget"
PIDFILE="/var/run/$NAME.pid"

set -e

. /lib/lsb/init-functions

unset FGUSER CONFIG LOG LEVEL

# Exit if flexget not installed
if [ ! -x "$DAEMON" ]; then
        log_action_msg "$DESC: Could not find flexget executable. Exiting."
        exit 2
fi

# Read configuration variables
if [ -r /etc/default/$NAME ]; then
        . /etc/default/$NAME
else
        log_action_msg "$DESC: /etc/default/$NAME not found. Exiting."
        exit 2
fi

# Exit if FGUSER has not been set in /etc/default/flexget
if [ -z $FGUSER ]; then
        log_action_msg "$DESC: FGUSER not set in /etc/default/$NAME. Exiting."
        exit 2
fi

# Function to verify if flexget is already running
run_check() {
        if [ -e $PIDFILE ]; then
               status_of_proc -p $PIDFILE $DAEMON $NAME > /dev/null && RETVAL=0 || RETVAL="$?"
        else
                RETVAL="2"
        fi
}

end_log() {
        if [ $RETVAL -eq 0 ]; then
                log_end_msg 0
                return 0
        else
                log_end_msg 1
                exit 1
        fi
}

# Function to define config file, log file and log level
conf_check() {
        if [ -z "$CONFIG" ]; then
                OPTIONS="$OPTIONS"
        else
                OPTIONS="-c $CONFIG"
        fi
        if [ -z "$LOG" ]; then
                OPTIONS="$OPTIONS"
        else
                OPTIONS="$OPTIONS -l $LOG/flexget.log"
                if [ ! -d "$LOG" ]; then
                        mkdir -p -m 750 $LOG
                        chown $FGUSER $LOG
                fi
        fi

        if [ -z $LEVEL ]; then
                OPTIONS="$OPTIONS"
        else
                OPTIONS="$OPTIONS -L $LEVEL"
        fi
}

start_flexget() {
        run_check
        if [ $RETVAL = 0 ]; then
                log_action_msg "$DESC: Already running with PID $(cat $PIDFILE). Aborting."
                exit 2
        else
                conf_check
                log_daemon_msg "$DESC: Starting the daemon."
                start-stop-daemon --start --background --quiet --pidfile $PIDFILE --make-pidfile --chuid $FGUSER \
                --user $FGUSER --exec $DAEMON -- $OPTIONS daemon start
                RETVAL=$?
                end_log
        fi
}

stop_flexget() {
        run_check
        if [ $RETVAL = 0 ]; then
                log_daemon_msg "$DESC: Stopping the daemon."
                start-stop-daemon --stop --quiet --chuid "$FGUSER" --pidfile "$PIDFILE" --retry 30
                RETVAL=$?
                [ -e "$PIDFILE" ] && rm -f "$PIDFILE"
                end_log
        else
                log_action_msg "$DESC: Not currently running. Aborting."
                exit 2
        fi
}

status_flexget() {
        run_check
        if [ $RETVAL = 0 ]; then
                log_action_msg "$DESC: Currently running with PID $(cat $PIDFILE)."
        else
                log_action_msg "$DESC: Not currently running."
        fi
        exit $RETVAL
}

case "$1" in
        start)
                start_flexget
        ;;
        stop)
                stop_flexget
        ;;
        restart)
                stop_flexget && sleep 2 && start_flexget
        ;;
        status)
                status_flexget
        ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
esac

exit 0

执行命令赋予权限:

1
chmod +x /etc/init.d/flexget

然后执行:

1
insserv -d flexget

或者

1
update-rc.d flexget defaults

之后就可以通过:

1
2
3
/etc/init.d/flexget start
/etc/init.d/flexget stop
/etc/init.d/flexget status

或者

1
2
3
service flexget start
service flexget stop
service flexget status

进行管理。 如果需要其它系统的配置,可以参看Auto Start

Web UI

请注意此功能目前为实验性功能(Flexget已经采用React重写了整个UI),不建议新手使用。
SSL为选择性配置功能,但如果为公网则强烈建议启用。
如需启用Web UI,默认配置十分简单:

1
2
web_server:
  run_v2: true

此配置默认会在http://0.0.0.0:5050/v2启用APIweb UI。
在此简单配置模式下,当端口设置为8080时,将使用WebUI v1
全部的配置命令如下:

  • bind: 要监听的IP地址
  • port: Web UI和API使用的端口
  • ssl_certificate: 证书的路径
  • ssl_private_key: 私钥的路径
  • web_uiyes|no设置为no则只启用API,同时关闭Web UI
  • base_url: 可以设置不同的相对路径; 默认为/
  • run_v2: 启用第二版UI(注意此配置可能发生改变)

完整配置写法如下:

1
2
3
4
5
6
7
8
web_server:
  bind: 0.0.0.0
  port: 3539
  ssl_certificate: '/etc/ssl/private/myCert.pem'
  ssl_private_key: '/etc/ssl/private/myKey.key'
  web_ui: yes
  base_url: /foo
  run_v2: yes

在第一次使用Web UI时,你需要执行如下的命令:

1
2
flexget web passwd <some_password>
flexget daemon start --daemonize

默认的登陆名为flexget,密码为之前设置的密码,如果不设置密码则无法使用Web UI。
你可以通过authorization header来使用API,格式为:Authorization: Token <TOKEN>
可以通过以下CLI命令来查看或者重置API token

1
2
3
4
5
# 查看token
flexget web showtoken

# 生成新的token
flexget web gentoken

API的更多使用信息请查看CLI文档。
目前可以使用的部分为:

Section 功能
Log 查看实时日志
在日志中搜索
History 查看最新下载的种子
按任务搜索
Miscellaneous 关闭Flexget
重载配置文件

更多使用方法请看官方说明Web UI剩下的部分咕咕了


结合邮件功能即可实现实时推送功能。
本文采用CC BY-NC-ND 4.0许可协议进行许可,转载请注明出处。

本文最后更新时间为:2019-05-27-Monday-10:37:58 PM




Image of Wechat