如何在 Windows 10 和 11 上的 WSL 中自动启动 Cron

9eb088f1ca35952

Windows 有多种方法可以自动执行任务。最常用的工具是 Windows 任务计划程序,但如果您使用的是适用于 Linux的Windows 子系统 (WSL),还有一个 cron 守护程序,它可以在后台运行 WSL 安装的任务。

Cron 默认不运行

Windows 10Windows 11 上,cron 包含在 Linux 环境(如 Ubuntu)中。问题在于 WSL 不会自动启动 cron,这意味着默认情况下不会执行您的自动化任务。

为了解决这个问题,您可以在每次打开命令行时手动启动 cron,但是手动启动一个应该自动执行任务的工具有点错过了重点。

幸运的是,有一个简单的方法可以解决这个问题,它需要使用任务计划程序。

ca9526bb93d047d

如果您从未在 Linux 中使用 cron 来运行任务,请查看我们之前关于如何在 Linux上调度任务的教程。出于我们的目的,我们将假设您已经在 WSL 安装中创建了一些 cron 作业,并且您需要帮助确保它们运行而不是一直照看 cron。

在本教程中,我们将使用sudo service来检查和启动 cron,这是在现代版本的 Ubuntu(WSL 最流行的发行版)上停止和启动服务的推荐方法。

另请注意,本教程假定您对自己的 WSL 版本具有管理员权限。如果您是 PC 的唯一用户并且您自己启用了 WSL,那么您确实拥有管理员权限。

准备 Linux

我们要做的第一件事是允许计算机在没有密码的情况下启动 cron。当您启动像 cron 这样的服务时,您使用命令sudo service cron start. 但是该命令需要密码,Windows 在启动时无法访问该密码。解决此问题的方法是关闭此命令对密码的要求。

为此,请打开 WSL 终端窗口并输入sudo visudo. 按键盘上的 Enter 键,输入您的 Linux 密码,然后再次按 Enter 键。如果您使用的是 Ubuntu,这将使用初学者友好的Nano 命令行文本编辑器打开“sudoers”文件。Sudoers是供系统管理员使用的文件,可以更改用户的权限和访问权限。

在 sudoers 文件底部添加以下命令,然后按 Ctrl+o 保存,按 Ctrl+x 退出文件。

%sudo ALL=NOPASSWD: /usr/sbin/service cron start

这个 sudoers 命令表示任何有足够权限使用 sudo 命令的用户(应该包括你)都不需要密码来运行命令sudo service cron start,它会启动 cron 守护进程。

保存文件后,您可以通过键入 来检查命令是否正在执行其工作sudo service cron start,并且它应该启动 cron 而不要求输入密码。如果成功,让我们再次关闭 cron,以便我们可以测试我们在下一步中创建的任务是否正常工作。为此,请运行sudo service cron stop.

在 Windows 任务计划程序中设置 Cron

这是我们实现 cron 自动化之旅的第一阶段。让我们继续使用任务计划程序进行第 2 部分。点击键盘上的 Windows 键,然后搜索“任务计划程序”。启动“任务计划程序”快捷方式。

84db0ea1406c8d2

当它启动时,在“操作”部分下查看并选择“创建基本任务”。

f297fa4fc1d2c67

这将打开基本任务向导。首先,它会要求您为任务命名并对其进行描述。你可以在这里输入任何你想要的。我们将任务称为“cron”,描述为“在系统启动时启动 cron 的任务”。现在,点击“下一步”。

在下一节中,我们将进入正题。首先,Windows 想知道我们什么时候要运行任务。选择“计算机启动时”单选按钮,然后单击“下一步”。

8f42d35f4f711be

在下一部分中,我们需要“启动程序”。默认情况下选择该选项,因此单击“下一步”。

4ae9dd47c2d4eff

现在,我们必须指定要运行的程序,即 WSL。在“程序/脚本”文本输入框中输入以下内容:C:\Windows\System32\wsl.exe

我们还需要添加一些参数,因为到目前为止我们所做的只是启动 WSL,但是在 WSL 中,我们需要告诉 Ubuntu 启动 cron。因此,在“添加参数”框中,添加:sudo /usr/sbin/service cron start

1a399dab3abdc4f

再次点击“下一步”,选中“单击完成时打开属性对话框”框,然后单击“完成”。

262937cd5d68cfb

任务已创建,但我们必须做最后一件事以确保一切正常。将打开一个新窗口,其中显示您创建的任务的摘要,但它仅设置为在您登录时运行。我们需要选择显示“无论用户是否登录都运行”的单选按钮,然后按“确定”。

现在,让我们以两种方式测试我们的任务。首先,在任务计划程序的主窗口中,向下滚动直到看到您的任务名称。如果您使用名称“cron”,它应该位于列表顶部。右键单击任务并选择“运行”。

4f052039b721afe

然后,返回到您的 WSL 终端并输入sudo service cron status,它应该说 cron 正在运行。如果不是,请仔细检查您在前面的步骤中是否正确输入了所有内容。

如果在第一次检查中一切正常,那就是进行大测试的时候了。重新启动你的电脑,当你回来时,打开一个 WSL 终端并运行sudo service cron status,它应该报告 cron 现在正在运行。

未经允许不得转载:表盘吧 » 如何在 Windows 10 和 11 上的 WSL 中自动启动 Cron