故事背景
公司为客户开发了一个网站,计划是linux服务器,结果同事去了现场发现只有一台window server。由于客户的服务器会不定时重启,所以我们需要设置程序的开机自动启动。
于是故事开始了。。
坎坷经历
第一坑
实现这个功能,网上一搜一大堆,比如这个Windows服务或者程序开机自启动的四种方式_windows_Windows系列_操作系统_脚本之家有时候我们需要将我们的一些exe文件、脚本代码等可以方便的自动运行,主要也是弥补windows计划经常出错的问题,这里为大家简单介绍一下https://www.jb51.net/os/windows/937775.html
经过短暂的权衡利弊,我选择方案一,即自启动文件夹方式。
首先是些写一个批处理文件,由于怕java -jar 方式启动打开的控制台窗口被误操作关闭,导致服务停止,所以采用javaw -jar的方式启动。
脚本我这么写:
@echo off
start javaw -jar D:\tmp\test\server.jar
exit
然后生成快捷方式放到自启动文件夹
好了!so easy...
但等到客户服务器重启之后,发现程序并不能访问,赶紧远程到服务器一看,锁屏了。。
赶紧联系客户方服务器管理员解锁,解锁5分钟后再试,程序运行正常。
**于是推测,是由于自启动文件夹中的程序必须要等到windows系统用户登录后才能运行。**
第二坑
不可能每次系统重启都让管理员进行用户登录操作,这样风险太高。所以果断放弃自启动文件夹方式,采用任务计划程序,设置开机启动,设置完成后让客户服务器管理员输入密码。
嗯,应该可能大概能行吧。。
结果服务器再次重启后,发现两个程序都没有正常运行。。。挠头。。。
第三坑
疯狂百度之后,我找到了这个:
Nginx在Windows操作系统中配置开机自动启动_windows 设置nginx、redis 服务开机自启动-CSDN博客文章浏览阅读3.9k次,点赞3次,收藏10次。关于如何在Windows操作系统中配置Nginx开机自动启动,解决方案如下:一、下载文件服务启动执行文件WinSW.NET4.exe下载地址:https://github.com/winsw/winsw/releases下载最新移动版即可,我用的是2.10.3:https://github.com/winsw/winsw/releases/tag/v2.10.3下载后放入nginx文件夹并改名为service.exe,如下图:二、在nginx文件夹下新建一个 service..._windows 设置nginx、redis 服务开机自启动https://blog.csdn.net/antma/article/details/112916917 成果解决了nginx开机自启动问题,但当我想继续用winsw继续安装java服务的时候,却怎么也安装不上。。
于是各种尝试各种搜。。偶然间发现了一个奇怪的现象:
当我在jar包所在目录文件夹shift + 鼠标右键打开powershell控制台,运行命令 java -jar server.jar,程序正常运行
当我cmd命令打开控制台,运行命令java -jar server.jar,程序运行失败,提示数据库连接超时。。
**嗯,总算让我找到了原因所在:jar包中的配置文件数据库地址是测试环境地址,生产环境的数据库地址配置在外部配置文件中。而cmd控制台运行程序时,没能加载到外部配置文件,也就是config文件夹下的配置文件,所以运行不起来。**
定位到了问题,那解决起来就简单多了,修改启动脚本为
@echo off
D:
cd D:\tmp\test
start javaw -jar D:\tmp\test\server.jar
exit
然后尝试启动站点的windows任务计划程序,程序完美启动。。
PS:
关于网上很多都说用命令:sc create service binPath= path命令直接安装服务,但是我安装的服务启动不起来。。原因未知,世上无难事,只要肯放弃,不研究了
关于wrapper-windows,配(懒)置(得)略(去)微(研)复(究)杂,同样放弃。。
关于添加本地组策略方式,公司电脑是家庭版,无法打开组策略配置,无法测试,直接去客户电脑配置组策略风险较高,放弃。。
版权归原作者 CiroCheng 所有, 如有侵权,请联系我们删除。