前言
前段时间使用E5SubBot来对365 E5进行续订,使用后发现E5SubBot项目确实有效。由于之前是使用nohup将程序放在后台运行,程序运行一段时间后会停止。为了解决这个问题,于是自己写了一个shell脚本,然后配合计划任务就解决了这个问题,事后发现自己又绕了弯路,用systemd服务不是更好吗?
不过自己写过的东西还是记录一下,直接删了又感觉没意义了,下面是我最开始写的脚本。
#!/bin/bashpid=`ps -aux | grep E5SubBot | grep -v 'grep' | awk '{print $2}'`if [ "$pid" != "" ];thenecho "running ..."elseecho "$(date '+%Y/%m/%d %H:%M:%S'):no run,starting..." >> /root/e5cron.logecho "no run"cd /root/e5sub/ && nohup /root/e5sub/E5SubBot >> /root/e5sub/e5sub-$(date +%Y%m%d%H%M%S).log &fi
接着配合计划任务,每两个小时执行一次自己写的shell判断是否已经停止运行,如果停止了就启动,没有停止则忽略。
* */2 * * * /root/e5bot.sh
然而上述方法并不是一个完美的方案,后来我将使用计划任务的方案改为了systemd服务的方式运行,我使用的服务器的操作系统是Centos 7,具体的过程如下。
安装过程
以下是我在Centos 7操作系统中的具体安装过程。
访问E5SubBot项目地址
E5SubBot项目Github地址:https://github.com/iyear/E5SubBot/releases
选择合适的版本
根据自己服务器的具体情况选择对应版本进行下载。这里我选择的是E5SubBot_Linux_64bit的版本,目前大多数服务器使用的均为此版本。
wget https://github.com/iyear/E5SubBot/releases/download/v0.2.1/E5SubBot_Linux_64bit.tar.gz
解压文件
将刚下载下来的文件进行解压。
tar xvf E5SubBot_Linux_64bit.tar.gz
得到如下四个文件,而我们需要使用的是E5SubBot这个二进制文件。
LICENSEREADME.mdREADME_zhCN.mdE5SubBot
创建文件夹并移动文件
将解压出来的文件E5SubBot移动到对应目录下。
# 创建文件夹mkdir /opt/e5sub# 移动文件mv E5SubBot /opt/e5sub/E5SubBot# 给文件添加执行权限chmod a+x /opt/e5sub/E5SubBot
安装MYSQL数据库
如果你已经安装了数据库,请进入下一步。这里我选择的是MYSQL5.7,如果你的服务器内存过小,可以使用MYSQL5.6或者选择使用远程MYSQL。
# 下载安装MYSQL源wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmrpm -ivh mysql57-community-release-el7-10.noarch.rpm# 安装数据库yum install -y mysql-community-server
选择其他版本数据库:
# 如果不使用mysql57请在以下地址选择对应的版本的rpm# https://repo.mysql.com/yum/# 也可以执行下面命令查询所有可用版本yum repolist enabled | grep mysql# 禁用当前使用的57版本yum-config-manager --disable mysql57-community# 选择启用使用56版本yum-config-manager --enable mysql56-community# 最后在执行安装yum install -y mysql-community-server
启动mysql数据库:
systemctl start mysqld.service
获取MYSQL的默认密码:
# 获取mysql自动生成的密码grep password /var/log/mysqld.log
接下来你应该会看到如下的一段文本,其中t;uY?tk&S2bT
就是你的密码:
2020-12-10T06:38:17.070043Z 1 [Note] A temporary password is generated for root@localhost: t;uY?tk&S2bT
登录数据库:
mysql -uroot -p'密码'
由于MYSQL57默认密码策略,密码过于简单不能设置:
-- 使用以下SQL查询当前密码验证策略mysql> show variables like 'validate_password%';-- 设置MYSQL密码验证策略为lowmysql> set global validate_password_policy=0;
创建e5sub数据库:
-- 创建e5sub数据库,并设置编码mysql> CREATE DATABASE `e5sub` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
创建角色,分配权限:
-- 创建e5sub用户,并设置密码mysql> CREATE USER `e5sub`@`localhost` IDENTIFIED BY 'e5sub';-- 将e5sub数据库的所有权限授权给e5sub用户mysql> GRANT all ON `e5sub`.* TO `e5sub`@`localhost`;-- 刷新权限mysql> FLUSH PRIVILEGES;
数据表不需要自己创建,E5SubBot在启动时会自动创建数据表。
配置E5Subbot
在/opt/e5sub目录下创建一个config.yml文件,配置telegram bot和mysql的具体信息。如果不知道如何配置请阅读E5SubBot项目readme.md的Configuration。
vim /opt/e5sub/config.yml
配置文件内容如下:
bot_token: 你的TG机器人的TOKENnotice: "这里可以填写机器人的通知信息"admin: 填写你tg的id,使其作为管理员#socks5: 127.0.0.1:1080errlimit: 15cron: "1 */1 * * *"bindmax: 5mysql:host: localhostport: 3306user: e5subpassword: e5subdatabase: e5sub
当然如果你使用的是境内服务器,需要指定socks5属性来使用代理服务器。以下是具体属性的说明。
属性 | 说明 |
bot_token | tg机器人的token,可以通过@BotFather进行获取 |
socks5 | [可选]用于指定socks5代理,例如127.0.0.1:1080 |
notice | 公告,在使用/help时显示 |
admin | 管理员tgid,可以通过@userinfobot获取,用于手动执行/task任务和获取总任务执行反馈 |
errlimit | 单个帐户错误的最大数量,当单个账户执行错误到指定次数时自动解除绑定并发送通知,若设置为-1则不限制 |
bindmax | 单个账户最大绑定帐号的数量 |
cron | 调用api的频率,使用cron表达式 |
mysql | mysql数据库的连接信息 |
编写Systemd单元文件
使用vim编辑器编辑单元文件。
vim /etc/systemd/system/e5sub.service
将以下内容复制进去。
[Unit]Description=Telegram E5Sub Bot[Service]Type=simpleWorkingDirectory=/opt/e5subExecStart=/opt/e5sub/E5SubBotRestart=alwaysRestartSec=30[Install]WantedBy=multi-user.target
设置开机自启
systemd单元文件编辑完成后需要重新载入服务配置文件。
systemctl daemon-reload
然后开启服务。
systemctl start e5sub
查看服务状态。
systemctl status e5sub
最后设置服务自启。
systemctl enable e5sub
简介
E5SubBot是一款用于E5续订的Bot软件,由于该项目使用的是MYSQL数据库,小内存服务器安装MYSQL显然不现实,唯一的选择只能是使用远程MYSQL,连接其他服务器上的数据库。基于此我对该软件(iyear/E5SubBot)进行简单的修改,替换E5SubBot中的mysql驱动github.com/go-sql-driver/mysql
为github.com/mattn/go-sqlite3
,并命名为E5SubBot For SQLite。同时在E5SubBot项目的基础上,使用gettext-go库将语言分离,实现语言国际化。目前E5SubBot For SQLite项目releases中提供的可执行二进制文件均由xgo工具CGO交叉编译而来。
目前该项目中只提供简体中文和英文两种语言,如果需要其他语言可以修改language.go中的json文本添加新的语言对应的翻译,然后进行编译即可。若服务器内存足够建议安装docker版本,能够免去大部分繁琐的操作。
部署
- 在Docker上部署E5SubBot For SQLite
# 创建用于存放数据的文件夹mkdir /opt/e5sub# (重要)创建数据库文件touch /opt/e5sub/e5sub.db# 下载配置文件wget --no-check-certificate -O /opt/e5sub/config.yml https://raw.githubusercontent.com/rainerosion/E5SubBotForSQLite/master/config.yml.example# 修改配置文件中的信息vim /opt/e5sub/config.yml# 在docker中启动运行docker run -d -v /opt/e5sub/config.yml:/root/config.yml -v /opt/e5sub/e5sub.db:/root/e5sub.db --restart=always --name e5bot rainerosion/e5subbot-sqlite# 启动后你可以通过下面的命令查看启动情况docker logs e5bot -f
以Systemd守护进程方式部署
下载必须的文件和配置并解压。
wget https://github.com/rainerosion/E5SubBotForSQLite/releases/download/0.2.2/E5SubBot-linux-amd64.tar.gz# 解压文件tar xvjf E5SubBot_linux_x64.tar.gz# 创建文件夹mkdir /opt/e5sub# 移动文件mv ./E5SubBot /opt/e5sub/E5SubBot# 添加执行权限chmod a+x /opt/e5sub/E5SubBot# 编辑配置文件(文件内容请阅读部署配置)vim /opt/e5sub/config.yml
- 编辑单元文件文件
vim /etc/systemd/system/e5sub.service
[Unit]Description=Telegram E5Sub Bot[Service]Type=simpleWorkingDirectory=/opt/e5subExecStart=/opt/e5sub/E5SubBotRestart=alwaysRestartSec=30[Install]WantedBy=multi-user.target
- 重载配置并启动服务
# 重载配置文件systemctl daemon-reload# 开机自启systemctl enable e5sub# 启动服务systemctl start e5sub
git clone https://github.com/rainerosion/E5SubBotForSQLite.git
- 编译(需要安装golang环境)
# LinuxCGO_ENABLED=1 go build# 若以上命令在windows报错请使用下面的方式编译go env -w CGO_ENABLED=1go build
配置文件
在同目录下创建config.yml
,编码为UTF-8
。其中dbfile
和lang
是SQLite版本中新增的配置项。lang
只在v0.2.2中有效。
配置模板:
bot_token: YOUR_BOT_TOKENsocks5: 127.0.0.1:1080notice: "第一行\n第二行"admin: 66666,77777,88888errlimit: 5cron: "1 */3 * * *"bindmax: 3dbfile: "e5sub.db"lang: zh_CN
bindmax
,notice
,admin
,errlimit
可热更新,直接更新config.yml
保存即可
配置项 | 说明 |
bot_token | 更换为自己的BotToken |
socks5 | Socks5 代理,不需要删去即可.例如:127.0.0.1:1080 |
notice | 公告.合并至/help |
admin | 管理员tgid ,前往 https://t.me/userinfobot 获取,用, 隔开;管理员权限: 手动调用任务,获得任务总反馈 |
errlimit | 单账户最大出错次数,满后自动解绑单账户并发送通知,不限制错误次数将值改为负数(-1) 即可;bot重启后会清零所有错误次数 |
cron | API调用频率,使用cron表达式 |
bindmax | 最大可绑定数 |
dbfile | sqlite数据库文件名 |
lang | 简体中文(默认):zh_CN English:en_US |
结语
在上述的一切就绪后,你就可以进入Telegram中与你搭建的Bot聊天,绑定帐号你的E5帐号,开始续订之旅。续订是个玄学问题,不一定成功,建议配合OneIndex一起使用。