一个使用Cloudflare API v4的动态DNS脚本

0   13085 转为繁体

分享一个使用Cloudflare API v4的动态dns脚本(Gist地址本地下载)。

因为11月Cloudflare就要下线v1版本的API了,而Openwrt里的ddns-scripts并没有支持新版[摊手],所以自己写了一个。

仅依赖curl(可以改成wget)。支持v4和v6。会请求ip.yooooo.us得到公网IP地址,怕隐私泄露的可以自己搭一个

 

This is a DDNS script using Cloudflare APIv4 written in bash (Gist or Download directly).

I wrote this because Cloudflare is going to remove support for the old API on Nov. this year. And the ddns-scripts package in Openwrt is not yet supporting the new API [摊手].

This script only depends on curl (can be modified to use wget). It will use ip.yooooo.us to query IPv4 and IPv6. You can use this link to set up your own query server.

deluge各种问题导致状态机抽风

6   9883 转为繁体

遇到一个问题,设置了deluge分享率和做种时间到一定时间之后自动删除种子。之前一直很好使的,最近发现到了指定的分享率或者做种时间之后,种子状态变成了一直Paused或者一直Seeding。发现有这么几种问题导致deluge抽风:

状态存档的权限不对

是deluged没有对状态存档~/.config/deluge/session.state和~/.config/deluge/state/*的写权限导致的。

因为自身需求使用

#  start-stop-daemon -S -c user:www-data -k 000 -x /usr/bin/deluged — -d

启动deluged,deluged具有user的euid和www-data的egid,而~是user:user的。所以就挂了233

直接添加种子下载地址导致一直Paused

deluge可以直接添加种子的http下载地址,取得种子之后自动开始下载,但是这样有一定几率产生万年Paused。

解决办法是自己下载种子之后返回磁力链添加到deluge。

 

Python float和decimal

2   10409 转为繁体

在Windows上打包Python脚本时遇到一个需求,将浮点数转成字符数组,比如输入1.001,得到[‘1′,’0′,’0′,’1’]

一开始想当然地用了:

version = 2.001

v = list(str(int(version * 1000)))

发现好像哪里不对,得到的v是[‘1’, ‘0’, ‘0’, ‘0’]。想了一想应该是浮点数的精度问题,因为一看version * 1000 = 1000.9999999999999

所以有这么几种解决方法:

v = list(str(int(round(version * 1000))))

或者:

v = list(str(version).replace(“,”, “”) + “000”)[:4]

或者用decimal模块,decimal是固定小数点位数的,用的是十进制乘除法,所以(在设定的位数内)不会产生误差:

from decimal import getcontext, Decimal

getcontext().prec = 4

v = list(str(Decimal(version) * 1000))

需要注意的是decimal会自动转换科学计数法,可以用”%d” % Decimal(d)来得到原始值。