赞
踩
在github上搞了一个springboot项目下来,在自己电脑上跑的时候,需要配置很多服务,包括:MySQL、Redis、Elasticsearch、Logstash、Mongodb等。
手动一个个点,非常麻烦,现在希望能一次性启动这些服务。
开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建、编辑和查看。两者所用的命令行代码也是共用的,**只是cmd文件中允许使用的命令要比bat文件多。cmd文件只有在windows2000以上的系统中才能运行,而bat文件则没有这个限制。**从它们的文件描述中也可以看出以上的区别:cmd文件的描述是“windows nt命令脚本”, bat文件的描述是“ms dos批处理文件”
如果没有一定的相关知识恐怕不容易看懂和理解批处理文件,也就更谈不上自己动手编写了.批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。**在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。**使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。
简单的说就是,写bat文件能够一次性启动多个你想要的服务。
在需要配置一个网站运行环境的时候,能有个bat文件一次性启动所有的服务,显得美滋滋。
注释用 ::
即可。
@echo off
:: 转到应用安装的盘符
E:
rem
也是注释,但运行时会显示的。
call的用处是调用另一个批处理程序,并且终止父批处理程序,只有该批处理执行完才会继续往下执行。
而start是另开一个窗口(若加上 /b
参数,不会另外弹框),并且不终止父批处理程序。
可见,start满足我们要一次性开启多个服务的需求。
脚本语法见这篇:简单批处理内部命令简介
主要看这篇:windows.bat脚本制作(一键启动springboot应用)
发现自己最后写了两种风格的。
第一种是成熟稳健略有点啰嗦,逻辑比较清楚的风格。
mysql-start.bat
:
@echo off
:: 启动mysql服务...
set MYSQL_HOME="C:\Program Files\MySQL\MySQL Server 8.0\bin"
cd %MYSQL_HOME%
net start mysql80
exit
mysql-stop.bat
:
@echo off
:: 关闭mysql服务...
set MYSQL_HOME="C:\Program Files\MySQL\MySQL Server 8.0\bin"
cd %MYSQL_HOME%
net stop mysql80
exit
代码解释
首先设置要访问MySQL安装路径:
set MYSQL_HOME="C:\Program Files\MySQL\MySQL Server 8.0\bin"
访问路径之后,执行启动服务的命令。
cd %MYSQL_HOME%
net stop mysql80
以上两个文件,需要以管理员身份运行(因为MySQL装在了C盘),成功运行之后窗口即消失。
若想查看输出的消息,可以在 exit
前加上 pause
。
以mysql-start.bat
为例:
@echo off
:: 启动mysql服务...
set MYSQL_HOME="C:\Program Files\MySQL\MySQL Server 8.0\bin"
cd %MYSQL_HOME%
net start mysql80
:: 查看输出的消息
pause
exit
可以看到消息:
注意事项
1.这里是发现本机上正常连接的都是MySQL80服务,所以命令写的是 net start mysql80
。
2.可能遇到的报错及解决
自己跑的时候遇到类似下面的报错:
[ERROR] [MY-013276] [Server] Failed to set datadir to ‘F:\Mysql\mysql-8.0.19-winx64\data’
见:解决[ERROR] [MY-013276] [Server] Failed to set datadir to ‘F:\Mysql\mysql-8.0.19-winx64\data\‘
按照博客上做了一遍就ok了。
第二种是更加方便的写法,适合同时启动多个服务。
用于启动所有服务的mall-service.bat
:
@echo off :: 转到应用安装的盘符 E: :: 启动MongoDB服务... set MONGODB_HOME="E:\11A Programming\MongoDB 4.4.2\bin" start cmd /k "cd "%MONGODB_HOME%"&&net start MongoDB" :: 启动redis服务... set REDIS_HOME="E:\11A Programming\Redis-x64-3.2.100" start cmd /k "cd "%REDIS_HOME%"&&redis-server.exe redis.windows.conf" :: 启动elasticsearch服务... set ELASTICSEARCH_HOME="E:\11A Programming\elasticsearch-7.6.2\bin" start cmd /k "cd "%ELASTICSEARCH_HOME%"&&elasticsearch.bat" echo 等待5秒钟... ping -n 5 127.0>nul :: 启动logstash服务... set LOGSTASH_HOME="E:\logstash-7.6.2\bin" start cmd /k "cd "%LOGSTASH_HOME%"&&logstash -f logstash.conf" exit
该脚本在本机上也需要管理员身份运行,成功运行后会出来四个窗口:
哇美滋滋
之后暂停服务的话我就写了停止MongoDB的,待补。
mall-service-stop.bat
:
@echo off
:: 转到应用安装的盘符
E:
:: 关闭MongoDB服务...
set MONGODB_HOME="E:\11A Programming\MongoDB 4.4.2\bin"
start cmd /k "cd "%MONGODB_HOME%"&&net stop MongoDB"
exit
四个窗口也要一个个关掉诶,有点麻烦的说。
代码解释
以启动MongoDB服务为例。
1.为方便日后修改,使用 MONGODB_HOME
存储要访问的路径:
set MONGODB_HOME="E:\11A Programming\MongoDB 4.4.2\bin"
2.执行完cmd后的命令不关闭窗口:
start cmd /k
3.命令之间用 &&
连接,代表前一个成功执行之后,再执行后面一个。
cd "%MONGODB_HOME%"&&net start MongoDB
此处意思即:先执行 cd "%MONGODB_HOME%"
,切换到目标路径后,执行 net start MongoDB
命令。
别的连接符见:如何使用组合命令
4.若有服务的运行依赖于前面的服务,而判断前面服务是否成功启动比较麻烦,那么可以通过设置等待的时间间隔,来启动后面的服务。
echo 等待5秒钟...
ping -n 5 127.0>nul
注意事项
1.若路径中有空格,一定要记得外面用 ""
括起来。可以看到上面代码中,cd "%MONGODB_HOME%"
的 cd
后面也是有括起来的,避免出错。
2.若脚本的位置和你要执行的服务位置不在一个盘,要记得在 cd 路径
之前,先转到对应的盘符。相关的应用我都装在了E盘,故第一步先转到这个盘符。
在实战的时候发现的小问题,不知道有没有更快捷的方式。
关闭exe的命令如下:
taskkill /f /t /im 文件名.exe
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。