WinSW使用说明

前言

由于使用windows自动的自启方法,不管是将程序启动服务放到开机自启文件夹中,还是创建任务计划程序,都没有很好的实现程序的开机自启效果,而WinSW很好的解决了这个问题。

下载

WinSW下载地址
注意:不同版本,有些配置是不一样的,比如我用的这个版本log mode就弃用了rotate模式,推荐使用roll模式。
这里我用的版本是: v2.12.0
在这里插入图片描述

配置介绍

配置的话其实在下载的那两个xml文件中就有介绍到,翻译着看也能懂的,这里再介绍一下比较常用的。

  • sample-allOptions.xml
    包含此版本的全部配置说明,文档不长,介绍的也很详细。
  • sample-minimal.xml
    给出一个最简单的示例配置,临时用用就够了。
参数说明
id安装windows服务后的服务ID,必须是唯一的,展示在任务管理器的服务列表中
name服务名称,也必须是唯一的,显示在打开服务的列表中
description服务描述
env环境变量,可在顶层配置多个
startmode启动模式,取值:Automatic(自动)、Manual(手动)、Boot(针对驱动程序)、 System(针对驱动程序),默认Automatic
delayedAutoStart是否启用延迟启动模式,值为true或者false,需要stratmode设置为Automatic
depend指定此服务依赖的其他服务的ID,仅在依赖的服务运行时此服务才可运行,可以使用多个标签指定多个依赖
log mode日志存储模式:append(默认,一直累积)、none(不存)、reset(启动就删除之前的)、roll、roll-by-time(参考下访说明)
logpath日志路径,%BASE%代表相对路径,也就是当前目录
executable要执行的命令,如启动命令java、nginx.exe
arguments命令执行参数,如指定虚拟机参数,配置文件路径、-jar xxx.jar等。
stopexecutable指定当请求停止服务时要执行的命令或可执行文件
stoparguments当请求停止服务时启动另一个进程时的参数
<service>
    <id>Minio-Server</id>
    <name>Minio-Server</name>
    <description>这个服务的描述</description>
    <env name="HOME" value="%BASE%"/>
    <env name="MY_TOOL_HOME" value="C:\etc\tools\myTool" />
    <env name="LM_LICENSE_FILE" value="host1;host2" />
    <depend>service_id1</depend>
	<depend>service_id2</depend>
	<startmode>Automatic</startmode>
  	<delayedAutoStart/>
    <!-- 要执行的可执行文件 -->
    <executable>%BASE%\xxx.exe</executable>
    <!-- 可执行文件传递的参数 -->
    <arguments>server "%BASE%\data"</arguments>
    <stopexecutable>%BASE%\xxx.exe -s stop</stopexecutable>
    <stoparguments>server "%BASE%\data"</stoparguments>
    <!-- <logmode>rotate</logmode> -->
    <logpath>%BASE%\logs</logpath>
    <log mode="roll-by-size-time">
      <sizeThreshold>10240</sizeThreshold>
      <pattern>yyyyMMdd</pattern>
      <autoRollAtTime>00:00:00</autoRollAtTime>
      <zipOlderThanNumDays>5</zipOlderThanNumDays>
      <zipDateFormat>yyyyMMdd</zipDateFormat>
    </log>
</service>

关于日志的的配置详细说明:
支持模式:

  • append - Rust更新现有日志;
  • none -不将可执行日志保存到磁盘;
  • reset -在启动时擦除日志文件;
  • roll-基于大小的滚动日志;
  • roll-by-time-根据时间滚动日志;
  • rotate -根据大小轮换日志,(8个日志,每个10MB)。此模式已弃用,请使用"roll".

roll模式的默认配置:

<!--工作方式类似于追加模式,
但除此之外,如果日志文件的大小超过了设定的大小,
它将滚转到myapp.1.out.log、myapp.2.out.log等等。
嵌套的<sizeThreshold>元素指定以KB为单位的旋转阈值(默认为10MB),
嵌套的<keepFiles>元素指定要保留的滚动文件的数量(默认为8)。-->
<log mode="roll-by-size">
  <sizeThreshold>10240</sizeThreshold>
  <keepFiles>8</keepFiles>
</log>

roll-by-time配置:按日志文件时间段滚动

<!--必须嵌套pattern标签指定日志文件名的时间标记格式,例如yyyyMMdd HH:mm-->
<log mode="roll-by-time">
  <pattern>yyyyMMdd</pattern>
</log>

roll-by-size-time配置:按日志文件大小和时间模式滚动

<!--嵌套sizeThreshold标签指定日志文件多大时生成新日志文件,单位为KB
嵌套pattern标签指定当日志文件文件名最后的区分字段格式(时间格式,如yyyyMMdd HH:mm)
嵌套autoRollAtTime标签指定每天在指定时间进行日志滚,例如00:00:00表示每天凌晨进行日志滚动-->
<log mode="roll-by-size-time">
  <sizeThreshold>10240</sizeThreshold>
  <pattern>yyyyMMdd</pattern>
  <autoRollAtTime>00:00:00</autoRollAtTime>
</log>

具体参考官方文档:log配置项说明及示例

可能有些配置文档中和官方给的下载xml中不一样,比如这个log mode参数,官方给的xml就没提到过roll-by-size-time这个配置,但是文档中有,其实也可以用。

示例

jar包启动示例

<service> 
     <!-- 服务唯一ID -->
     <id>imApiId</id>
     <!-- 服务名称-->
     <name>imApiService</name>
     <!-- 服务描述-->
     <description>this is im api,author:chaodev</description>
     <executable>java</executable> 
     <arguments>-jar imApi.jar</arguments>
     <!-- 开机启动 -->
     <startmode>Automatic</startmode>
     <!-- 日志配置 -->
     <logpath>%BASE%\logs</logpath>
     <logmode>roll</logmode>
 </service>

扩展:补偿两个手动启动的bat脚本:

1. 后台启动

#
@echo off
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit
java -jar C:\Users\Administrator\Desktop\aa\jnpf-admin-3.4.5-RELEASE.jar > imApiLog.log  2>&1 &
exit

后台启动,启动日志及后续访问日志(相当于控制台输出日志),显示在脚本中设置的imApiLog.log中;
关闭服务:
netstat -ano|findstr 8088 # 根据端口号查进程
taskkill /f /pid 13968 # 根据进程id杀进程(/f:强制结束该进程以及所有子进程)

2. dos窗口启动

@echo off & setlocal EnableDelayedExpansion
 
title xxxx服务
 
for %%a in (8080) do (
  set pid=0
  for /f "tokens=2,5" %%b in ('netstat -ano ^| findstr ":%%a"') do (
    set temp=%%b
    for /f "usebackq delims=: tokens=1,2" %%i in (`set temp`) do (
      if %%j==%%a (
        taskkill /f /pid %%c
        set pid=%%c
        echo 端口号【%%a】相关进程已杀死
      ) else (
        echo 不是本机占用端口【%%a】
      )
    )
  )
  if !pid!==0 (
    echo 端口号【%%a】没有占用
  )
  java -Xms1024m -Xmx1024m -Dfile.encoding=utf-8 -jar xxx.jar 
)
 
echo 操作完成
pause

安装服务

将前边准备好的xml文件及下载的WinSW程序拷贝到需要配置开机自启的程序文件夹,根据需求重命名这两个文件,注意保持两个文件名一致
在这里插入图片描述

执行命令:

安装服务:
WinSW-x64.exe install

卸载服务:
WinSW-x64.exe uninstall

启动服务:
WinSW-x64.exe start

停止服务:
WinSW-x64.exe stop

重启服务:
WinSW-x64.exe restart

检查服务状态:
WinSW-x64.exe status

刷新服务属性而不是重新安装:
WinSW-x64.exe refresh
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Wins11终端中,可以使用多个命令来运行指定的工具或执行特定的操作。 一种常见的命令是`go tool`命令,用于运行指定的Go工具。使用`go tool`命令,可以运行`go help tool`命令来获取关于每个工具命令的更多信息。该命令还可以打印已知工具的列表。例如,要运行特定的Go工具,可以使用以下命令:`go tool command [args...]`。其中,`command`是要运行的工具命令的标识符,`args...`是工具命令的参数。请注意,使用`-n`标志可以打印将要执行的命令,但不实际执行它。 另一个常见的命令是`ping`命令,用于测试网络的连通性。在Wins11终端中,可以直接使用`ping`命令来ping指定的IP地址。然而,有时在Windows终端中使用`ping`命令可能会出现一些问题,具体情况可能因网络配置或其他因素而异。 除此之外,Wins11终端还提供了许多其他命令,可以用于执行各种操作。例如,可以使用`Net Continue`命令来继续挂起的网络服务,使用`Net File`命令来查看或关闭打开的文件,使用`Net Group`命令来管理用户组,使用`Net Help`命令来获取关于特定命令的帮助信息,等等。Wins11终端还提供了许多其他有用的命令,可以根据具体需求选择合适的命令来执行相应操作。 最后,如果你想对Go代码进行格式化,可以使用`gofmt`命令。在Wins11终端中,可以运行`go fmt`命令来对指定的包进行重新格式化。该命令将运行`gofmt -l -w`命令,并打印被修改的文件名。使用`-n`标志可以打印将要执行的命令,而`-x`标志可以打印命令的执行过程。 总结起来,Wins11终端提供了丰富的命令来运行工具、测试网络连通性、执行各种操作和格式化Go代码。具体使用哪个命令取决于你的需求和具体情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值