- 作者:老汪软件技巧
- 发表时间:2024-10-03 07:00
- 浏览量:
背景
笔者在 windows 服务器上运行了一个量化交易软件,有一些操作需要用到 pyautogui 这种操作 GUI 的库。如果不主动登录,没有发起一个 GUI 会话的话,这些脚本就无法正常运行。
前面已经在《解决windows服务器「计划任务」无法运行GUI脚本的问题》中介绍了,可以用 VNC Server 解决这个问题。但是,这个方法的前提是,服务器启动之后,一定要用 VNC 登陆一下远程服务器,启动一个 GUI 会话才行。
那么问题来了。怎么让服务器一启动就自动开启一个 GUI 会话,让 pyautogui 的脚本成功运行呢?
如果这个功能实现了,可是能省很大一笔服务器费用哦。
正文
我们先来介绍下如何实现开机自动启动 GUI 会话,然后再说说怎么利用这个功能省钱。
开机自动登录
其实原理很简单,就是强制让服务器开机时,自动登录一个账号,通常就是 Administrator 了。要想实现这个功能,需要修改一下注册表,步骤如下:
按 Win + R,输入 regedit,按回车,打开注册表编辑器;在注册表编辑器中,导航到以下路径:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
在 Winlogon 目录下,新建或修改以下项:注册表项类型值
AutoAdminLogon
字符串值(REG_SZ)
DefaultUserName
字符串值(REG_SZ)
用户名,例如 Administrator
DefaultPassword
字符串值(REG_SZ)
用户密码
DefaultDomainName
字符串值(REG_SZ)
域名或计算机名(可选)
ForceAutoLogon
字符串值(REG_SZ)
1(可选)
完成以上步骤后,关闭注册表编辑器,重启服务器。
注意事项:
添加开机启动任务
GUI 的问题解决了,接下来就是添加任务,运行脚本了,具体操作可以参考《如何在 windows 服务器上开机启动程序》,这里就说几个小 tips:
任务要选择「只在用户登录时运行」;脚本运行之前留够时间。可以在任务的「触发器」设置里面,设置一个延迟任务的时间。或者直接在脚本最前面加一个 time.sleep(30) 之类的代码。因为刚开机,应用启动起来可能会比较慢,脚本运行太快的话可能找不到 GUI 元素,导致运行失败;如果运行的是 python 脚本,在「操作」设置里的「程序或脚本」不能直接写脚本地址,否则会弹出一个让你选择运行程序的对话框。应该在「程序或脚本」里填写 python 的地址,如 C:\Users\Administrator\AppData\Local\Programs\Python\Python312\python.exe,然后在「添加参数」里写脚本地址,如 C:\Users\Administrator\Desktop\test.py。
另外,如果你使用了《解决windows服务器「计划任务」无法运行GUI脚本的问题》中提到的方法,那么记得启动 VNC Server。Tips 如下:
任务要选择「不管用户是否登录都要运行」,勾上「使用最高权限运行」;触发时机选择「在系统启动时」;启动的程序一定选 server 的应用,如 "C:\Program Files\TightVNC\tvnserver.exe";定时开关机省钱
下面说说怎么省钱了。因为笔者运行的是一个股票量化交易程序,所以实际上只需要在交易日的 9:30~15:00 运行就可以了,其它时间完全是空转。所以我们完全可以选择一个按量付费的服务器,然后定时关机进入省钱模式(费用几乎可以忽略不计),到点再自动开机运行脚本,岂不美哉。
具体怎么定时开关机,直接看文档就行了,说的非常详细,这里附上阿里云的文档:《使用定时开关机节省ECS使用成本》。下面我们就来算算到底能省多少钱。
就以「4核8G」的服务器算,按量付费的价格是¥0.47916/时,包年包月的价格如下:
按照我的使用计划,每天运行6小时,每月运行22天,0.48 * 6 * 22 = ¥63.36,如果中午休市也关机的话,大概每月能控制在 ¥48 左右,比 5 年包年包月的最大折扣还便宜。
大概算了一下,如果每天使用时长超过 6.5 小时的话,那么购买 5 年服务器还是比较划算的,不过一口气就要交 ¥4200,而且每月按量付费的灵活,所以各位自己算好账吧。
结语
这个技术点卡了我很久,最近逼得我必须把它研究了,好在有了 ChatGPT,解决问题的效率提高了不少。不过这个过程我也发现,就算有了 AI,如何提出好问题,如何抽丝剥茧的分析问题,才是最重要的。
好了,现在基本上可以在服务器上成功运行各种脚本了,广阔空间,大有可为。