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

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

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

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

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

答案1

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

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

echo "service cron start" | sudo tee /usr/local/bin/cronstart.sh
sudo chmod +x /usr/local/bin/cronstart.sh

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

2.创建一个文件,/etc/sudoers.d/以便您$USER执行cronstart.shsudo 无密码. 运行以下命令来生成必须放在 sudoers 文件中的行:

echo "$USER ALL=(ALL) NOPASSWD: /usr/local/bin/cronstart.sh"

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

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

现在,点击任务计划程序库在左边,然后创建任务…创建新任务。您可以使用以下参数来配置任务:

  • 常规选项卡

    姓名任何你想要的任务,比如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

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

答案2

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

[boot]
command="service cron start"

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

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

[boot]
command="service ssh start; service cron start"

你仍然需要在视窗某种启动任务(如上一个答案中所述)以触发选项boot,但现在这个任务可以像这样简单wsl -e true。这将运行true命令然后退出,但也会触发命令boot

答案3

我发现的唯一方法似乎很完美,并且只需要 2 分钟即可完成设置 这里

简而言之:

  1. 在基本 Windows Shell 应用程序中执行 shell:startup

  2. 这将打开文件夹“C:\Users****\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”

  3. 添加快捷方式“wsl.exe”,目标为“C:\Windows\System32\wsl.exe sudo /etc/init.d/cron start”

  4. 通过“sudo visudo”编辑 sudo 配置文件

  5. 在文件中添加“%sudo ALL=NOPASSWD: /etc/init.d/cron start”以防止 cron 服务的管理员密码

相关内容