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
accept
和reject
可以单独使用。
完整语法规则:
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> # 对所有方案生效
可以采用的参数有accept
,reject
,accept_excluding
和reject_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
启用API和
web UI。
在此简单配置模式下,当端口设置为8080
时,将使用WebUI v1
。
全部的配置命令如下:
bind
: 要监听的IP地址port
: Web UI和API使用的端口ssl_certificate
: 证书的路径ssl_private_key
: 私钥的路径web_ui
:yes|no
设置为no
则只启用API,同时关闭Web UIbase_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