截至 2018 年 5 月,Windows Subsystem for Linux 仍然不支持init.d
或systemd
服务管理,我遇到了服务和在线的几个选项的问题,但并非在所有情况下都能最佳地工作
答案1
以下 bash 脚本对我有用。请注意,continue
需要使用运算符来跳过失败的脚本,并且start
大多数服务脚本都需要该参数。我相信
for f in /etc/init.d/*; do sh "$f" start || continue; done ;
答案2
这只是一个大致的方向(我就是这样做的)——也许有人可以改进这个想法。
每当LxssManager 服务已启动(重新启动)事件查看器 -> Windows 日志 -> 安全中有 2 个条目
审计成功 2019 年 1 月 13 日星期日 13:34:52 Microsoft Windows 安全审计。4672 特殊登录 审计成功 2019 年 1 月 13 日星期日 13:34:52 Microsoft Windows 安全审计。4624 登录
如果右键单击任务类别列中的“特殊登录”,则可以用以下操作“将任务附加到此事件”(使用任务计划程序)
程序/脚本:C:\Windows\System32\wsl.exe 和参数:/usr/bin/apache.sh(或您创建的任何其他 .sh 文件)
在 Linux 端创建 .sh 文件以在 Linux 中启动您的服务(这是我的做法):
创建 apache.sh 并将其放入 /usr/bin/
我的 apache.sh 看起来像:
#!/bin/sh
sudo service apache2 start
如果你的脚本需要 Linux 身份验证,你可以使用
ubuntu config --default-user root (将默认用户设置为 root ) - 以管理员权限从 cmd.exe 运行此命令。
有关更多信息https://docs.microsoft.com/en-us/windows/wsl/user-support
这似乎是一个很好的自动化无麻烦方法(至少对我来说)
答案3
过去我还没有看到任何真正好的答案,所以我开发了以下脚本,并在几台机器上使用。它使像 apt install apache2 这样的操作变得更容易,因为它通常会自动配置。我添加了注释,以便更容易了解如何使用它,并将其放在 github 上。还决定修复一个恼人的视觉错误。
这假设您的 sudoers 文件中没有 passwd,否则您将在启动时收到提示。
#!/bin/bash
# Add new shortcut under the following directory
# "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
# Make the shortcut here the following is an example, assuming this file is /etc/init.sh
# You can change the 3 to 5 for example if for example you used x11
# C:\Windows\System32\bash.exe -c "/usr/bin/sudo /etc/init.sh 3"
# You will also need to update your sudoers to allow NOPASSWD as otherwise it will prompt you for a password each time.
[[ -z $1 ]] && { echo "Need to specify a run level"; exit 127; }
run_level=$1
[[ -d /etc/rc${run_level}.d/ ]] || { echo "Need to specify a run level"; exit 127; }
for rc_service in /etc/rc${run_level}.d/K*; do
[[ -e "$rc_service" ]] && $rc_service stop
done
for rc_service in /etc/rc${run_level}.d/S*; do
[[ -e "$rc_service" ]] && $rc_service start
done
我将在这里接受任何错误修复或建议: https://github.com/masshuku/wsl-init.sh