最近临时在nuc上开了一个Linux版本的Minecraft服务器,跑在tmux里面,但是进程时不时会崩溃,有时候我又不看群消息,导致玩家很久都进不去,所以写了下面这个简单的脚本配合cron来定时检查进程是否退出,如果进程退出了则向tmux里面输入重启的命令。
不过目前这个版本很是原始,在一台服务器上运行多个进程就会出问题,也没办法处理假死的情况,后续考虑完全通过tmux send的返回而不是依赖进程名字来判断服务器状态。
我的tmux窗口名为mc,服务器运行在第一个(0号)pane中
1
2
3
4
5
6
7
8
| #!/bin/bash
now=$(date +"%Y-%m-%d %T")
pgrep bedrock_server > /dev/null
if [ $? -ne 0 ]; then
echo "${now} server crashed, rebooting..."
# send command to tmux pane
tmux send-keys -t mc.0 "bash start.sh" ENTER
fi
|
配合cron每分钟执行一次脚本即可
1
2
| crontab -e
*/1 * * * * /root/check.sh >> /var/log/mccheck.log
|