我在使用Windows子系统Linux上运行SSH时遇到问题。似乎如果shell没有打开并运行bash,子系统中的所有进程都将被终止。有办法阻止这个吗?
我曾尝试使用nssm创建服务,但无法使其正常工作。现在我试图启动一个shell,然后将它发送到后台,但我还没弄清楚如何。
您必须保持至少一个bash控制台处于打开状态才能使后台任务继续运行:只要关闭上一个打开的bash控制台,WSL就会删除所有正在运行的进程。
是的,我们正在努力改善这种情况;)
在最近的Windows 10 Insider版本中,我们添加了keep daemons and services running in the background的功能,即使你关闭了所有Linux游戏机!
此方案的一个剩余限制是您必须手动启动服务(例如Ubuntu中的$ sudo service ssh start
),尽管我们正在研究如何允许您在登录计算机时配置哪些守护程序/服务自动启动。更新要遵循。
为了维护WSL进程,我将此文件放在C:\ Users \ USERNAME \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup \ wsl.vbs中
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /etc/rc.local'",0
在/etc/rc.local中,我启动了一些服务,最后“睡眠”以保持整个运行:
/usr/sbin/sshd
/usr/sbin/cron
#block on this line to keep WSL running
sleep 365d
在/etc/sudoers.d中我添加了一个'rc-local'文件,允许上面的命令没有sudo密码提示:
username * = (root) NOPASSWD: /etc/rc.local
username * = (root) NOPASSWD: /usr/sbin/cron
username * = (root) NOPASSWD: /usr/sbin/sshd
这在1607上运行良好,但在更新到1704之后,我无法再通过ssh连接到wsl。
一旦你运行了cron,就可以使用'sudo crontab -e -u username'来定义带有@reboot的cron作业,以便在登录时启动。
今天早些时候阅读这个帖子并使用它来运行sshd而不打开wsl控制台。我在Windows 10版本1803上使用WSL中的Ubuntu 16.04.5 LTS。我需要进行一些更改才能使其正常工作。非常感谢谷歌搜索和这样的社区。
我修改了/etc/rc.local:
mkdir /var/run/sshd
/usr/sbin/sshd
#/usr/sbin/cron
我需要为sshd添加目录,否则我会收到错误“Missing privilege separation directory / var / run / sshd我注释掉了cron,因为我遇到了类似的错误,没有时间或者还没有修复它。
我还更改了sudoers条目以使它们工作:
username ALL = ....
希望这对某人有用。约翰巴特勒