重启后 WSL cron 守护进程上的 Ubuntu 18.04 未运行

Tul*_*lio 5 cron services windows-subsystem-for-linux

我在 Windows 10 Pro 下运行 Ubuntu 18.04.1 LTS。每次重新启动后,不会启动 cron 守护进程。

我可以手动启动它sudo service cron start

我可以配置什么或需要修改什么系统文件,以便在重新启动后启动 cron 守护进程?

pa4*_*080 9

正如在 Windows 登录上启动 Linux 后台服务一文中所述,您需要sudo service cron start从 Windows触发您的命令。为此,您可以使用 Windows 任务计划程序。以下是上述文章中的步骤,稍作修改:

1.创建启动脚本并使其可执行:

echo "service cron start" | sudo tee /usr/local/bin/cronstart.sh
sudo chmod +x /usr/local/bin/cronstart.sh
Run Code Online (Sandbox Code Playgroud)

因此cronstart.sh将可以作为 shell 命令系统访问。

2.创建一个/etc/sudoers.d/有目的的文件,允许您$USER没有密码cronstart.shsudo 情况下执行。运行以下命令生成必须放在 sudoers 文件中的行:

echo "$USER ALL=(ALL) NOPASSWD: /usr/local/bin/cronstart.sh"
Run Code Online (Sandbox Code Playgroud)

复制命令的输出,使用该命令sudo visudo -f /etc/sudoers.d/cronstart并将复制的行粘贴为新创建文件的内容。保存文件并退出

3.在 Windows 中,转到搜索栏,找到并运行任务计划程序(如果您当前的帐户不是管理员帐户,则以管理员身份运行)。

现在,单击左侧的Task Scheduler Library,然后单击右侧的Create Task...以创建新任务。您可以使用以下参数来配置任务:

  • 常规选项卡

    将任务命名为您想要的任何名称,例如WSL service cron start.

    选择选项无论用户是否登录都运行

    标记不存储密码以最高权限运行

    配置下拉列表中选择Windows 10

    如果您需要为其他用户设置任务,请单击按钮Change User or Group...

  • 触发器选项卡

    单击新建...为此任务添加新触发器。

    开始任务下拉列表中选择At startup.

    高级设置中,您可以检查延迟任务1 minute

  • 操作选项卡

    单击新建...为此任务添加新操作。

    为操作类型选择启动程序,然后输入C:\Windows\System32\wsl.exe要运行的程序。

    添加参数(可选)中设置:sudo cronstart.sh

就是这样。重新启动系统,然后打开 WLS 终端并使用service cron status检查是否cron is running.


我做了一些测试,不幸的是我发现 Windows 10 遇到了一些错误,当你使用 Windows 帐户而不是本地帐户时,几乎不可能为非管理员用户的帐户设置这样的任务......一团糟:O

作为在这种情况下的解决方法,您可以创建一个cronstart.bat在文件夹中调用的文件shell:startup,内容如下:

C:\Windows\System32\wsl.exe sudo cronstart.sh
Run Code Online (Sandbox Code Playgroud)

如何使用 VBS 而不是 bat 文件来实现相同的结果如下所示:

  • 不再需要 Sudoers 部分,因为我们可以以 root 身份运行命令:`wsl.exe -u root my_command` (2认同)

Not*_*1ds 7

Windows 11 中的一项新功能(假设您可以升级)是能够使用该/etc/wsl.conf文件指定 WSL 的启动任务。如果您使用的是 Windows 11,请使用以下行创建该文件:

[boot]
command="service cron start"
Run Code Online (Sandbox Code Playgroud)

根据Microsoft 文档,这将在 WSL 实例启动时以 root 身份运行该命令。

如果您需要在 WSL 启动时运行多个命令,请在同一command行中用分号分隔它们:

[boot]
command="service ssh start; service cron start"
Run Code Online (Sandbox Code Playgroud)

您仍然需要在某种Windows启动任务中运行 WSL(如前面的答案中所述)才能触发选项boot,但此任务现在可以像wsl -e true. 这将运行该true命令,然后简单地退出,但也会触发该boot命令。


归档时间:

查看次数:

4824 次

最近记录:

6 年 前