持久化运作

Docker

更新 Docker 容器的 Restart 策略open in new window 以达到进程守护效果。

docker update --restart=unless-stopped artalk-go

Docker Compose

docker-compose.yml 文件给服务添加 restart: unless-stopped 策略:

version: '3'
services:
  artalk:
+   restart: unless-stopped

tmux

tmux 将创建一个持续的命令行会话,在 SSH 或 tty 断开后保持在后台。

Note: 服务器关闭或重启后,tmux 会话将被清除,需要手动重新运行程序。

  1. 创建会话 tmux new -s artalk-go
  2. 运行程序 ./artalk-go server

恢复接入会话:tmux attach -t artalk-go

查看所有会话:tmux ls

systemd

sudo vim /etc/systemd/system/artalk-go.service

[Unit]
Description=Artalk Go
After=network.target remote-fs.target nss-lookup.target

[Service]
User=root
ExecStart=<ArtalkGo 执行文件绝对路径> server -w <工作目录绝对路径> -c <配置文件相对于工作目录路径>
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-abnormal
RestartSec=5s

[Install]
WantedBy=multi-user.target
  • 更新 systemd 配置:systemctl daemon-reload
  • 启动:systemctl start artalk-go.service
  • 停止:systemctl stop artalk-go.service
  • 状态:systemctl status artalk-go.service

Tip: 设置 alias 简化命令输入;ArtalkGo 参数 -w 用于指定工作目录,配置文件中的所有「相对路径」会基于该目录,例如 ./data/ 文件夹。

Supervisor

以宝塔面板举例:打开「软件商店」,搜索并安装「Supervisor管理器」:

安装后,打开插件,点击「添加守护程序」:

  • 名称:任意
  • 启动用户:root 或其他
  • 运行目录:点击右侧图标,打开到 Artalk 所在目录
  • 启动命令:./artalk-go server