WinSW設置應用程序開機啓動

前言
由於使用windows自動的自啓方法,不管是將程序啓動服務放到開機自啓文件夾中,還是創建任務計劃程序,都沒有很好的實現程序的開機自啓效果,而WinSW很好的解決了這個問題。

下載
WinSW下載地址
注意:不同版本,有些配置是不一樣的,比如我用的這個版本log mode就棄用了rotate模式,推薦使用roll模式。
這裏我用的版本是: v2.12.0。

 

 

配置介紹
配置的話其實在下載的那兩個xml文件中就有介紹到,翻譯着看也能懂的,這裏再介紹一下比較常用的。

sample-allOptions.xml
包含此版本的全部配置說明,文檔不長,介紹的也很詳細。
sample-minimal.xml
給出一個最簡單的示例配置,臨時用用就夠了。

 

<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>

注意

id:唯一標識,我設爲jar包的名稱
name:服務中展示的名字
description:服務描述
executable:java 或 jdk路徑
arguments:執行的命令和jar包路徑,我這因爲jar包和xml在一個目錄,可以直接寫jar包名,路徑沒給出也可以,給路徑時,需要加雙引號,ru:"d:/ff/xxx.jar"。

啓動註冊服務:在xxx.exe當前目錄中進入cmd ,執行xxxexe install,服務中就註冊成功了

擴展:補償兩個手動啓動的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程序拷貝到需要配置開機自啓的程序文件夾,根據需求重命名這兩個文件,注意保持兩個文件名一致

 

注意

id:唯一標識,我設爲jar包的名稱
name:服務中展示的名字
description:服務描述
executable:java 或 jdk路徑
arguments:執行的命令和jar包路徑,我這因爲jar包和xml在一個目錄,可以直接寫jar包名,路徑沒給出也可以,給路徑時,需要加雙引號,ru:"d:/ff/xxx.jar"。

啓動註冊服務:在imNginxService.exe當前目錄中進入cmd ,輸入 imNginxService.exe install 回車,服務中就註冊成功了 

執行指令

執行命令:

安裝服務:
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

 參考鏈接:https://blog.csdn.net/zwjzone/article/details/132362965 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章