首页 » SEO优化 » phpbat技巧_编写BAT脚本治理进程

phpbat技巧_编写BAT脚本治理进程

访客 2024-10-28 0

扫一扫用手机浏览

文章目录 [+]

+ :: 关闭命令显示+ @echo off+ :: 须要确认已经将nginx进程加入到系统环境变量中,否则会涌现找不到进程的缺点,如果不想加入到环境变量,则可以指定完全的程序路径如:start /b nginx.exe+ :: /b 参数指定往后台进程办法来运行程序+ start /b nginx

考试测验运行脚本查当作果,得到了一个缺点,从缺点信息中可以看出彷佛是找不到配置文件的问题

通过排查创造,nginx在运行时默认以当前实行进程的目录为运行时目录,但是由于当前目录中并没有运行时所须要的必要文件环境,以是涌现了上面的缺点,在nginx中可以通过 ​-p​ 参数来指定运行时的主目录

phpbat技巧_编写BAT脚本治理进程

编辑脚本文件,指定nginx运行时的主目录

phpbat技巧_编写BAT脚本治理进程
(图片来自网络侵删)

:: 关闭命令显示@echo off...- start /b nginx+ start /b nginx -p D:\Apps\Nginx-1.21.1

再次实行脚本,可以看到这次没有涌现缺点了,并且在任务管理器中也能查看到对应的进程

通过taskkill命令关闭进程

在上一步中,已经可以成功启动进程了,接下来便是如何关闭进程了,在批处理脚本中可以通过 ​taskkill 命令来杀去世进程,我们可以通过这个命令来达到关闭进程的效果

:: 关闭命令显示@echo off- :: 须要确认已经将nginx进程加入到系统环境变量中,否则会涌现找不到进程的缺点,如果不想加入到环境变量,则可以指定完全的程序路径如:start /b nginx.exe- :: /b 参数指定往后台进程办法来运行程序- start /b nginx -p D:\Apps\Nginx-1.21.1++ :: 杀去世进程+ :: /f 逼迫终止指定进程+ :: /t 终止指定的进程和由它启动的子进程+ :: /im 指定要终止的进程的映像名称。
通配符 ''可用来指定所有任务或映像名称。
+ taskkill /f /t /im nginx

考试测验实行脚本查当作果,得到了如下缺点,这是由于在taskkill中必须指定完全的程序名称个中的 ​.exe​ 也是不能忽略的

编辑脚本文件,加入完全的进程名称

:: 关闭命令显示@echo off...- taskkill /f /t /im nginx+ taskkill /f /t /im nginx.exe

再次实行脚本,可以看到已经显示成功杀去世了进程,并且在任务管理器中也已经没有这个进程了

通过进程自身供应的命令来关闭进程

除了可以利用 ​taskkill​ 命令来关闭进程外,有些程序自身也有供应了管理进程本身的命令,我们可以通过这些命令来管理进程,比如nginx就有供应了 ​-s​ 参数来管理进程的关闭、重启等操作

重启进程

对付一些程序本身自带了重启命令的,我们可以直策应用程序本身的命令来对程序进程管理,对付没有的则可以通过杀去世进程后在启动进程来达到重启的效果

吸收脚本参数

通过上面的步骤我们已经理解到了如何通过脚本来掌握进程的启动、关闭和重启了,接下来就须要通过参数来掌握脚本管理指定的脚本

首先我们须要一个参数来指定要启动的进程,除此之外还须要另一个参数来管理是启动还是关闭进程的指令

编辑脚本文件,加入如下内容

:: 关闭命令显示@echo off- :: 杀去世进程- :: /f 逼迫终止指定进程- :: /t 终止指定的进程和由它启动的子进程- :: /im 指定要终止的进程的映像名称。
通配符 ''可用来指定所有任务或映像名称。
- taskkill /f /t /im nginx.exe+ :: 通过 %0~%n 可以获取脚本输入的参数,个中 %0 表示脚本的名称+ set commandName=%1+ set serviceName=%2++ echo CommandName: %commandName%+ echo ServiceName: %serviceName%

考试测验携带参数实行脚本查当作果,可以看到已经能精确获取到了我们输入的参数

接下来就要通过脚本中输入的参数来掌握进程的启动和关闭了,编辑脚本,加入如下内容

:: 关闭命令显示@echo off+ :: 开启延迟加载扩展+ setlocal EnableDelayedExpansion...- echo CommandName: %commandName%- echo ServiceName: %serviceName%+ :: 由于在批处理脚本中没有数组的观点,但我们可以利用变量的延迟加载机制来仿照数组的效果+ :: 由于有些程序启动须要指定必要的一些参数,如nginx须要指定运行时目录才能正常启动,以是须要有一个变量来存储默认的启动参数+ set args[nginx]=-p D:\Apps\Nginx-1.21.1+ :: 利用延迟加载机制达到动态加载变量的目的+ set args=!args[%serviceName%]!+ :: 设置启动指令数组,利用变量数组来存储指令命令,之后通过动态数组的办法来调用指定的指令+ set commands[start]=start /b %serviceName% %args%+ set commands[stop]=taskkill /f /t /im %serviceName%.exe+ set commands[restart]=%commands[stop]% ^&^& %commands[start]%+ :: 实行指令+ call !commands[%commandName%]!

考试测验实行脚本,可以看到现在已经可以通过脚本来掌握nginx的启动和关闭了

为程序配置独立的做事文件

虽然现在已经可以通过该脚本来管理进程的启动和关闭了,但是此脚本还是有着许多的问题,上面我们只是配置了一个进程的启动,可以看到每个进程的启动参数都不一样,如果都放到一个脚本里面,随着进程的增多,脚本也会变得越来越大,所以为了可扩展性我们可以参考linux下的systemctl系统为每个进程编写一个做事脚本

新建脚本文件 ​Systemctl.bat​ ,写入如下内容

:: 关闭命令显示@echo off:: 开启延迟加载扩展setlocal EnableDelayedExpansion:: 吸收脚本参数,通过 %0~%n 可以获取脚本输入的参数,个中 %0 表示脚本的名称set commandName=%1set serviceName=%2:: 设置数组,用来限定指令范围set commands[start]=Startset commands[stop]=Stopset commands[restart]=Restartset commands[status]=Status:: 设置service文件目录set servicePath=D:/Bin/servicesset serviceFile=%servicePath%/%serviceName%.service:: 参数验证if "%commandName%"=="" call :EndBatch "Error: 'command' is not null"if not defined commands[%commandName%] call :EndBatch "Error: invalid 'command', options command start\stop\restart"if not exist %serviceFile% call :EndBatch "Error: %serviceName%.service file is not exist":: 检讨进程是否已运行if "%commandName%"=="start" tasklist|find /i "%serviceName%.exe" && ( call :EndBatch "%serviceName%.exe in Running"):: 状态查看if "%commandName%"=="status" ( tasklist /fi "IMAGENAME eq %serviceName%.exe" call :EndBatch):: 读取文件内容for /f "delims=," %%i IN (%serviceFile%) do %%i:: 实行操作call !service[%commandName%]!:: 输出实行结果if %errorlevel%==0 ( call :EndBatch "%serviceName% %commandName% success!") else ( call :EndBatch "%serviceName% %commandName% error!"):: 退出脚本:EndBatch if not "%~1"=="" echo %~1 call :ExitBatchgoto :eof:: 逼迫退出脚本代码块:ExitBatch - Cleanly exit batch processing, regardless how many CALLs if not exist "%temp%\ExitBatchYes.txt" call :buildYes call :CtrlC <"%temp%\ExitBatchYes.txt" 1>nul 2>&1:CtrlC cmd /c exit -1073741510:buildYes - Establish a Yes file for the language used by the OS pushd "%temp%" set "yes=" copy nul ExitBatchYes.txt >nul for /f "delims=(/ tokens=2" %%Y in ( '"copy /-y nul ExitBatchYes.txt <nul"' ) do if not defined yes set "yes=%%Y" echo %yes%>ExitBatchYes.txt popdexit /b

在​ Systemctl.bat​ 文件同级目录下新建 ​services​ 目录,并在该目录下新建 ​nginx.service​ 文件,写入如下内容

set service[start]=start /b nginx -p D:\Apps\Nginx-1.21.1set service[stop]=nginx -p D:\Apps\Nginx-1.21.1 -s stopset service[restart]=nginx -p D:\Apps\Nginx-1.21.1 -s reload

考试测验实行脚本,可以看到现在我们已经通过 Systemctl.bat 这个脚本文件来管理进程了,而且我们只须要为须要管理的进程编写service文件,就可以接入管理

在新建一个 ​php7.3-fpm.service​ 文件,输入如下内容

set service[start]=start /b php7.3-cgi -b 127.0.0.1:9000set service[stop]=taskkill /f /t /im php7.3-cgi.exeset service[restart]=!service[stop]! ^&^& !service[start]!

​mysqld.service​ 文件

set service[start]=net start MySQL8.0set service[stop]=net stop MySQL8.0set service[restart]=!service[stop]! ^&^& !service[start]!

标签:

相关文章

php输出几点技巧_PHP输出缓冲及其应用

如上图,是一个大略单纯的缓冲区仿照图,左端入口的数据具有单个输入体积小,速率快,数量多,但右端输出数据具有体历年夜,速率慢的特点。...

SEO优化 2024-12-13 阅读0 评论0