学习
实践
活动
专区
工具
TVP
写文章
专栏首页二丫讲梵的博文Windows10利用winsw将应用封装成系统服务后台启动

Windows10利用winsw将应用封装成系统服务后台启动

# 1,前言

接到一个需求,是基于 Jenkins 给 unity 打包,unity 则需要在 Windows 环境下构建,因此实现这个需求的第一步,就是需要解决给主 Jenkins 添加一个 Windows 节点的 slave。

# 2,配置slave

创建 slave 的步骤比较简单,这里通过一张截图来看下配置信息:

其他内容都是常规配置,这里不多赘述,需要注意其中标号的两个配置信息。

  1. 记得配置为只允许运行绑定到这台机器的 Job,以免其他正常构建的 Job 调度到这个节点。
  2. 此处使用 Java Web 启动代理的方式与 master 进行连接,需要注意的是,master 节点需要在系统管理 ==> 全局安全设置 ==> 代理中选择指定端口,一般将端口指定为 50000,用于与 slave 节点进行通信。

注意: 使用这种方式通信的 slave 配置方式,务必需要将 Jenkins 的访问域名解析在 Jenkins 的 master 节点上,因为 slave 启动之后,会通过域名与 50000 端口进行建连,如果域名通过其他主机的 Nginx 代理,则会出现建连超时的情况而失败。

当我们将上边的配置保存之后,Jenkins 会给一条启动命令,如下:

$ java -jar agent.jar -jnlpUrl http://jenkins.eryajf.net/computer/windows%2Dunity/jenkins-agent.jnlp -secret 73ed891710ac084b2b45d11b7935032bef012c4415273ded59c85a5a0fbd1bc3 -workDir "C:\tpln-work\jenkins"

此时,只要 Windows 主机上有 JDK 环境,那么把 agent.jar 下载之后,在终端使用这条命令启动即可成功配置该 slave 节点。

# 3,服务后台启动

上边介绍了给主 Jenkins 配置一个 Windows 节点的步骤,最后其实是遗留了一个问题,那就是启动 slave 节点的终端还不能关闭,一旦关闭,那么这个节点也就挂了。

看了网上的一些方案,最后选择了一个名为 winsw 的开源项目来解决这个问题:

winsw

将任何应用程序作为 Windows 服务进行包装和管理。

- name: winsw
  desc: 将任何应用程序作为 Windows 服务进行包装和管理。
  avatar: https://avatars2.githubusercontent.com/u/416130?s=460&u=8753e86600e300a9811cdc539aa158deec2e2724&v=4 # 可选
  link: https://github.com/winsw/winsw # 可选
  bgColor: '#FBDE4B' # 可选,默认var(--bodyBg)。颜色值有#号时请添加单引号
  textColor: '#fff' # 可选,默认var(--textColor)

# 1,安装

安装比较简单,通过 release (opens new window) 可以下载,根据自己系统架构,下载对应版本的包即可:

$ wget https://github.com/winsw/winsw/releases/download/v3.0.0-alpha.10/WinSW-x64.exe

此时这个 exe 文件就相当于一个命令行工具,接下来的操作,都将通过这个命令行工具来完成。

你可以把这个文件放在任意一个你方便浏览访问的地方。

我这里将文件单独放在了 soft 目录下:

$ cd C:\soft\winsw
$ cp WinSW-x64.exe jenkins.exe

建议把名字改成与你要托管的服务一致,便于后期维护管理。

# 2,配置

winsw 依赖 xml 配置文件来对服务进行管理,以下是官方文档的示例:

<service>
  <id>jenkins</id>
  <name>Jenkins</name>
  <description>This service runs Jenkins continuous integration system.</description>
  <env name="JENKINS_HOME" value="%BASE%"/>
  <executable>java</executable>
  <arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
  <log mode="roll"></log>
</service>

如上配置信息基本上也都是见名知意,这里简单解析如下:

  • id: 服务 ID 名称(唯一)
  • name: 服务显示名称
  • description: 服务的描述信息
  • env: 配置环境变量
  • executable: 要执行命令的二进制,此处可以写绝对路径
  • arguments: 启动命令跟随的参数

更详细说明,参考: https://github.com/winsw/winsw/blob/v3/docs/xml-config-file.md (opens new window)

我现在是要启动 Jenkins 的 slave,那么根据如上信息,配置文件大概如下:

$ cat jenkins.xml
<service>
  <id>jenkins</id>
  <name>Jenkins</name>
  <description>Jenkins Windows Slave Node.</description>
  <executable>java</executable>
  <arguments>-jar C:\tpln-work\pack\agent.jar -jnlpUrl http://jenkins.eryajf.net/computer/windows%2Dunity/jenkins-agent.jnlp -secret 73ed891710ac084b2b45d11b7935032bef012c4415273ded59c85a5a0fbd1bc3 -workDir "C:\tpln-work\jenkins"</arguments>
  <logmode>rotate</logmode>
</service>

配置文件可以放到与可执行文件相同的目录下。

# 3,管理

配置文件配置完毕之后,就可以使用如下命令创建这个服务:

# 安装服务
$ jenkins.exe install
Installing service 'Jenkins (jenkins)'...
Service 'Jenkins (jenkins)' was installed successfully.

# 启动服务
$ jenkins.exe start
Service 'Jenkins (jenkins)' was refreshed successfully.
Starting service 'jenkins (jenkins)'...
Service 'jenkins (jenkins)' started successfully.

# 查看服务状态
$ jenkins.exe status
Active (running)

此时就可以看到服务已经在后台守护中运行了。

当我们执行完 install 之后,在系统中,也可以看到这个服务:

# 4,更多

服务管理的时候,还有更多参数,这里一并整理:

命令

描述

install (opens new window)

安装服务。

uninstall (opens new window)

卸载服务。

start (opens new window)

启动服务。

stop (opens new window)

停止服务。

restart (opens new window)

重启服务。

status (opens new window)

查看服务状态。

refresh (opens new window)

重新加载配置文件。

customize (opens new window)

自定义包装器可执行文件。

dev

实验命令。

还有一些实验性的命令:

命令

描述

dev ps (opens new window)

绘制与服务关联的进程树。

dev kill (opens new window)

如果服务已停止响应,则终止该服务。

dev list (opens new window)

列出由当前可执行文件管理的服务。

每个参数都有对应的文档地址,点击之后可以查看更详细内容。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://wiki.eryajf.net复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 用winsw让任何Windows程序都能运行为服务

    winsw介绍 有时候我们需要在Windows下开机运行某些程序,这对于有图形界面的程序来说一般不是什么事,在选项中选中开机启动,然后它们就可以自动运行了。但是...

    乐百川
  • 大型分布式存储方案MinIO介绍,看完你就懂了!

    官方解释:MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据...

    IT技术分享社区
  • 5 分钟,使用内网穿透快速实现远程桌面

    但是,它们大多是商业化软件,价格昂贵;即使有提供免费版本,也是各种限制,稳定性和安全性也没法得到保证

    AirPython
  • exe程序打包成windows服务,5分钟超简单上手

    加菲猫今天接到腾讯备案组的电话,说你的站点现在无法访问,是否要停止接入?小姐姐的好听的声音分别是严厉的语气,我赶紧解释说,我的服务器被腾迅云停止服务了,说有病毒...

    加菲猫的VFP
  • 5 分钟,使用内网穿透快速实现远程桌面

    但是,它们大多是商业化软件,价格昂贵;即使有提供免费版本,也是各种限制,稳定性和安全性也没法得到保证

    AirPython
  • Win-jar包设置开机自启

    最近需要将jar设置为开机自启,所以,查找了一些资料,有2种实现方式,1种是将jar包注册为服务,2是在开机菜单下添加批处理命令。

    搬码工
  • 让JavaWEB程序如MySQL服务一样自启动

    框架师
  • 部署内网穿透 实现微信支付测试本地回调

    最近在开发公司的商城系统用到了微信支付 但是支付成功后的回调本地没法调用 只能将本地的服务映射到外网 这样就可以了

    @依然范特西
  • 使用frp实现内网穿透和远程桌面控制

    根据上图我们知道了TeamViewer被黑客攻击了,所以我们为了安全起见,就暂时不使用TeamViewer来远程控制了。

    丁D
  • 使用腾讯云轻量应用服务器运用FRP搭建内网穿透服务器

    通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

    青阳
  • 五步安装Docker

    Docker 是一个开源的应用容器引擎,它是基于 Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级...

    Wu_Candy
  • 如何在Windows系统搭建好Spring Cloud Stream开发环境

    当下微服务架构盛行,在Java语言世界最佳的微服务实践无疑是Spring Cloud。Spring Cloud顾名思义就是提供一系列云服务技术的技术解决方案组合...

    leaforbook
  • 【拓展】745- Windows Server 升级 HTTPS 实战

    趁着国庆假期,开发了个小程序,但需要服务器使用 HTTPS 协议,因此借这次机会,学着自己完成 HTTPS 升级工作。

    pingan8787
  • 将Spring Boot应用程序注册成为系统服务

    在之前的文章中,我们提到了很多Spring Boot的技巧,那么当我们创建好了Spring Boot应用程序之后,怎么在生成环境中运行呢?如果只是以原始的jav...

    程序那些事
  • 专属| FakeKMS伪装成激活工具

    近期,安全研究员通过Twitter发布警告称,一种新发现的恶意软件目前正通过垃圾电子邮件活动在全球范围内。该恶意软件将自己伪装成一款很受欢迎的开源压缩软件Pea...

    漏斗社区
  • 在Windows上如何后台运行JuiceFS

    JuiceFS的Badger引擎改造完成以后,需要在Windows下面进行后台运行。因为现有的JuiceFS中还没有在Windows下的后台运行实现,所以需要通...

    用户1260683
  • Linux中samba服务器的搭建教程

    使用的vmware12虚拟机安装的centos6.8和物理机上的windows10,实现在windows10 上访问CentOs上的samba服务。

    砸漏
  • Windows系统快速安装Superset 0.37

    Superset 是一款由 Airbnb 开源的“现代化的企业级 BI(商业智能) Web 应用程序”,其通过创建和分享 dashboard,为数据分析提供了轻...

    大数据流动
  • Docker快速学习

    必须认识到Docker与VmWare时不可以共存的,Docker利用了win的Hyper-V技术,开启Hyper-V(Windows10 专业版)安装win f...

    Mirror王宇阳

扫码关注腾讯云开发者

领取腾讯云代金券