咱遇到的需求:
自动备份系统需要备份mc服务器的存档,
但是基岩版的服务端在运行时会锁定存档文件,所以需要关闭服务器进行备份,
但是怎么关掉它呢?总不能强杀进程吧.jpg
包装一个目标程序,允许使用简单的文件操作来操作目标程序的stdio,
这样就可以在备份脚本中使用类似于echo stop > stdin
这样简单方法关掉服务器了
- 启动时会读取配置文件并启动目标程序
- 启动时会在当前目录下创建stdio_helper文件夹
- 在stdio_helper中从创建对应的文件可以操作包装程序的stdio(见下文)
- 目标程序退出时会一并退出,并继承目标程序的ExitCode
- 在命令行中给定的参数会全部被传递到目标程序
stdio_helper在运行后会在当前目录下创建操作文件夹stdio_helper_dir
,在其中可以进行一些操作:
- 文件
stdin
,由用户创建,检测到后则向目标程序的stdin中传入文件内容,操作完成后,文件将被删除; 若目标程序没有启动,则不会理会该文件; 若文件含有多行,则依次执行; - 文件
stdout
,由stdio_helper创建会持续向其中写入目标程序程序的stdout - 文件
running
,由stdio_helper在启动时创建,并在退出时删除
配置文件采用json格式
{
"target": "./awa.exe"
}
注意,这里只能指定可执行程序的位置,不能包含命令行参数,命令行参数直接传递给stdio_helper即可
- 下载存储库
- 在根目录执行
go build
- 完事了