目录说明
linux系统mc服务器守护脚本
mc 服务端很奇怪,它启动以后是一个java的交互式界面,用户需要在里面写命令去管理服务器,网上大多数教程都是叫用screen工具来进行虚拟界面的一个管理,但是这个工具对于自动化脚本来说很不方便,系统外部的命令无法被有效的传入并执行。
难道就没有更为简单的方法去管理和使用这个这个东西了吗?至少我至今没有找到,要是找到的话欢迎留言。本脚本都是Linux发行版常见的,基础的命令去管理和使用,当然除了lsof
这个命令,其他的命令都是用基础的shell语言去编写的。
本脚本分开了命令的输入与交付界面信息的输出,需要执行命令的话需要向管道文件tre
追加写入就可以了。(自动公告啥的可以自己写了),命令执行后会有输出,交付界面的输出信息保存在log
文件内,可以直接通过文件的方式读取。
java服务端的核心执行语句:
java -Xmx8G -Xms1G -jar ./KCauldron.jar nogui < tre >> log
注意:java -Xmx8G -Xms1G -jar ./KCauldron.jar nogui
是启动服务端的命令,这个需要根据服务器的配置去写。
后面的<
这个符号代表输入重定向,把tre
文件的内容输入到这个进程里面去。这个就是可以直接向tre文件里面追加内容可以在java界面
内执行的原因。
那么后面的>>
符号是啥意思?就是把界面输出的内容给传递到log
文件里面去,所上实现了最重要的两个功能。
要是你不想在终端开启两个文件同时查看的话也可以使用下面的这个命令。
java -Xmx8G -Xms1G -jar ./KCauldron.jar nogui <> tre
以上命令经过测试需要更高级的操作方法或者使用方式
这样就只有一个文件既是输入又是输出了,这个使用情况就见仁见智了,喜欢用哪个用哪个。
这样直接运行的话,当服务器停止后,也就是输入stop
命令后,服务端是不会再自己启动了的,那么我要重启服务器还要登录上来进行重启吗?当然不用,用while
死循环来直接启动不就好了吗。于是变成了下面这样
#!/bin/sh
while true
do
java -Xmx8G -Xms1G -jar ./KCauldron.jar nogui < tre >> log
done
讲道理这样已经足够了,但是实际运行的时候还是会出现很多莫名其妙的事项,比如多次重启,启动多个java服务端实例,这个就需要控制一下了,没有啥比直接查看端口占用情况更为直接的了,反正端口被占用后进程也无法启动。
加一个端口情况判断就是下面的最终脚本了。
为啥不用screen
工具?
因为进入虚拟终端界面很麻烦,网上也找不到相关的自动化脚本。通常服务器上很可能没有screen
工具
为啥用这种形式来启动服务器?
只要稍微懂一点的都可以通过这个脚本来实现简单的web页面的服务端。
实现了命令输入与日志输出分开的功能,暂时没有加入历史命令记录的功能,这个随便改改就能有了。
需要有lsof
命令工具,检查方法:在终端中使用lsof -h
查看是否有提示,没有提示请自行百度安装
最终脚本:
现在是脚本的流程解释
- 导入系统环境变量.
- 设定端口的值
prots
- 定义
while
死循环。 - 初始化重启次数。
- 判断端口是否被占用。
- 没有被占用就启动服务端,端口被占用就输出提示并不会启动服务端。
- 清空管道输入文件。(要是不清空会有问题,因为上一条命令很可能就是stop,不清空会先把stop命令输入进去,造成无限重启)
#!/bin/sh
#输入命令通过写入tre文件可以传到java命令行中
#java的日志会输出到log文件内,通过tail命令去查看输出
source ~/.bash_profile
source ~/.bashrc
prots=25640
sum=0
while true
do
lsof -i:$prots
df=`echo $?`
if [ 1 -eq $df ]
then
d=`date +%F_%T`
echo "$d 重启次数: $sum次"
echo > tre
java -Xmx8G -Xms1G -jar ./KCauldron.jar nogui < tre >> log
echo > tre
let sum=sum+1
else
d=`date +%F_%T`
echo "$d 端口 $prots 服务正常运行"
fi
done
脚本使用
新建脚本
在目录执行执行下面的命令创建空文件,授予执行权限,通过vi编辑脚本
echo > start.sh;chmod +x start.sh;vi start.sh
进入编辑界面后输入小写的`a`进行编辑
复制命令
使用脚本
启动脚本:直接后台启动运行即可
nohup ./start.sh &
输入命令:
echo "命令" >> tre
比如
echo "stop" >> tre
实时显示日志
tail -f ./log
这个命令会一直刷新最新的内容,按 Ctrl+C
键退出