Top Menu

wechaty严重错误退出后自动重启方案

这个方案使用了docker的–restart always参数,以及memory-card.json,wechaty严重错误出现Exit(1)导致程序崩溃后,能够自动用上次登录的微信号重新启动服务,代码更新后,只需要restart一下容器即可更新至最新代码。

自有镜像

镜像名称:minirplus/wechaty

  • 基础镜像:wechaty/wechaty:0.73

说明:目前跟随官方镜像,以下内容均可以使用官方镜像替换wechaty/wechaty

安装方法

安装docker

已有docker可跳过此步

测试用例

测试程序,官方用例,example-bot.js

将以上代码保存为/root/wechaty/example-bot.js,或自定义路径,但是记得修改后续路径

测试运行

运行后,用微信扫码登录。

生产运行

创建生产wechaty容器

注意,其中

-d,后台运行(必填)

–restart always,程序崩溃后自动重启(必填)

-v /root/wechaty:/bot,是指定工作目录为/root/wechaty(必填)

example-bot.js,指定运行的入口名称,注意,这里入口的真实路径为/root/wechaty/example-bot.js,替换为生产程序入口即可(必填)

扫二维码登录微信

如果是首次执行程序,需要连入容器的logs,进行扫码登陆

输出及查看实时日志

在程序中使用类似 console.log(`Message: ${message}`)) 即可输出日志,但是是没有时间戳的。

如果需要按日志格式输出,可以加载wechaty内置的log模块来格式化日志输出

输出的日志类似 02:58:05 INFO StarterBot Starter Bot Started.

查看日志和上面的登录微信方法一样,唯一的区别是可能日志太多,需要加一个时间限制,这里用–since=5m来同步5分钟前的历史日志,-f同步显示实时日志。

自动重启方案原理

wechaty会自动保存上次扫码登陆的用户信息,但是前提是需要在创建bot的时候设置bot的名称

之后,每次崩溃后自动重启容器,都不需要再重新扫码登陆了

然后,当我们代码有更新,需要重启容器的时候,基于上述的原理,只需要刻意导致程序崩溃即可,可以在代码中植入一个崩溃点

例如,可以绑定一个当接收到 #restart 消息时,返回一个web登录不支持的url链接 await msg.say(urlLink); ,容器就会崩溃然后自动重启,达到了发送命令重启容器的目的

Know More

什么是wechaty?

微信机器人,自动回复、定时消息

https://wechaty.gitbook.io/wechaty/v/zh/

https://wechaty.js.org/

There are no comments yet

  • Hello, guest

Powered by WordPress. Designed by WooThemes