为了实现动态的域名解析到家里的设备,需要长期运行一个开源脚本mtDNS。(其实路由器上的动态DNS配合花生壳就行,但是喜欢折腾……)
在使用一段时间后,感觉到任务栏一直有个程序在显示不清爽,遂寻找后台运行的办法,而Windows平台似乎并不支持(没找到),所以想到了WSL(Windows Subsystem for Linux)。
找了在Ubuntu中开机运行脚本/程序的办法(这里)。
但经过实验,在WSL中并没有效果,所以又找了专门的WSL中实现开机自启脚本/程序的办法。
思路为:给Windows设置开机自启脚本,脚本内容是执行WSL中某个脚本,而你在WSL中的脚本里面自定义一些命令(启动你程序或者脚本的命令),从而实现WSL中的脚本开机自启。
两个大佬写的已经很全面了,所以我就不打算复述了,这里贴上链接
WSL 服务自动启动的正确方法
在Windows子系统(WSL)中配置开机自启动服务
注意:两位大佬的办法差不多,都是这个思路,但是我尝试给Windows启动目录添加一个vbs文件时,总是提示权限不够要求管理员权限(还有的时候提示要求向我本人的账户提出申请权限),尝试了很多办法,都没有解决这个问题(我怀疑是BUG)。最后通过把vbs文件放在别的目录,然后启动目录放vbs文件的快捷方式解决了。
步骤:
复制vbs文件 回到“启动”目录 右击选择“粘贴快捷方式”即可 吐槽:如果为了安全启动目录不让放vbs文件可以理解,但我放vbs文件的快捷方式一样可以实现效果却没有任何限制就离谱。
编辑/etc/rc.local文件 sudo vi /etc/rc.local
打开之后如果发现是新建的文件,也不要害怕,添加以下信息
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # 这里添加你要开机执行的语句 exit 0 之后保存并退出
nohup和&配合使用,退出时不要直接单击右上角的x,而是使用exit退出。
然后可以试着再次打开WSL的窗口看看进程。
不要使用jobs,因为jobs只能看当前终端启动的进程,你刚才关了又开了,就不是刚才的终端了。(巨坑,一开始我还以为没有成功后台运行)
使用ps -ux | grep 刚才的程序名或者命令名(关键字即可)
例如:ps -aux | grep node
再次退出终端就可以直接单击右上角的x了。
参考:
nohup和&后台运行,进程查看及终止 linux后台运行和关闭、查看后台任务 WSL——Win10的Linux子系统 在Windows上舒适地使用Linux子系统(一):WSL的安装及配置 linux后台执行命令:&和nohup