如何在 Windows WSL 上运行 init.d 脚本?

如何在 Windows WSL 上运行 init.d 脚本?

截至 2018 年 5 月,Windows Subsystem for Linux 仍然不支持init.dsystemd服务管理,我遇到了服务和在线的几个选项的问题,但并非在所有情况下都能最佳地工作

答案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

相关内容