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

已发表: 2022-01-29
一只手拿着秒表。
十亿张照片/Shutterstock.com

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

Cron 默认不运行

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

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

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

显示 cron 未运行的 Windows WSL 终端窗口。

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

广告

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

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

提示:这也适用于 Windows 11 上的 Linux 的 Windows 子系统,而不仅仅是在 Windows 10 上。

相关:如何在 Linux 上安排任务:Crontab 文件简介

准备 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 键,然后搜索“任务计划程序”。 启动“任务计划程序”快捷方式。

Windows 10 中的搜索结果显示任务计划程序作为选项。

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

Windows 10 的任务计划程序,带有指向“创建基本任务”选项的红色箭头。

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

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

Windows 10 中的一组单选按钮,带有指向“计算机启动时”选项的红色箭头。

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

Windows 10 任务计划程序的程序选项,红色箭头指向程序路径和附加参数文本输入框。

广告

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

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

Windows 10 的任务计划程序的最终任务创建窗口带有一个红色箭头,指向在完成时打开任务属性窗口的选项。

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

带有红色箭头的 Windows 任务属性窗口,指向选项“无论用户是否登录都运行”。

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

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

显示 cron 正在运行的终端窗口。

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

广告

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

恭喜! 您已经迈出了进入一个更大的自动化世界的第一步。 随着 cron 在后台运行,您在 WSL 中配置的 cronjobs 将自动按计划运行。