Windows有几种自动化任务的方法。最常见的工具是Windows任务调度器,但如果您使用的是Windows Subsystem for Linux(WSL),那么还有cron守护程序,它在后台运行WSL安装的任务。
默认情况下cron未运行
在Windows 10和Windows 11上,cron包含在Ubuntu等Linux环境中。问题是WSL不会自动启动cron,这意味着默认情况下不会执行自动任务。
为了解决这个问题,您可以在每次打开命令行时手动启动cron,但手动启动一个应该自动执行任务的工具有点说不过去。
幸运的是,有一种简单的方法可以解决这个问题,这需要使用任务调度器。
如果您从未在Linux中使用cron来运行任务,请查看我们之前的教程,了解如何在Linux上调度任务。出于我们的目的,我们将假设您已经在WSL安装中创建了一些cron作业,您需要帮助确保它们运行,而不是一直照看cron。
在本教程中,我们将使用sudo服务来检查和启动cron,这是在最流行的WSL发行版Ubuntu的现代版本上停止和启动服务的推荐方法。
此外,请注意,本教程假定您对WSL版本具有管理员权限。如果您是PC的唯一用户,并且您自己启用了WSL,那么您确实拥有管理员权限。
Tip: This works in the Windows Subsystem for Linux on Windows 11, too—not just on Windows 10.
相关:如何在Linux上安排任务:Crontab文件简介
准备linux
我们要做的第一件事是允许计算机在没有密码的情况下启动cron。当您启动类似cron的服务时,可以使用命令sudo service cron start。但该命令需要密码,Windows启动时无法访问该密码。解决此问题的方法是关闭此命令的密码要求。
为此,打开WSL终端窗口并键入sudovisudo。按键盘上的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服务cron stop。
在windows任务调度程序中设置cron
这是我们迈向cron自动化的第一阶段。让我们继续学习任务调度器的第2部分。点击键盘上的Windows键,然后搜索“任务计划程序”。启动“任务计划”快捷方式。
启动时,查看“操作”部分,然后选择“创建基本任务”
这将打开基本任务向导。首先,它将要求您命名任务并对其进行描述。你可以在这里输入你想要的任何内容。我们将任务称为“cron”,描述为“在系统启动时启动cron的任务”。现在,点击“下一步”
在下一节中,我们开始谈生意。首先,Windows希望知道何时运行该任务。选择“计算机启动时”单选按钮,然后单击“下一步”
在下一节中,我们需要“启动程序”。默认情况下,该选项处于选中状态,因此单击“下一步”
现在,我们必须指定要运行的程序,即WSL。在“程序/脚本”文本输入框中输入以下内容:C:\Windows\System32\wsl.exe
我们还需要添加一些参数,因为到目前为止我们所做的只是启动WSL,但在WSL内部,我们需要告诉Ubuntu启动cron。因此,在“Add Arguments”框中,添加:sudo/usr/sbin/service cron start
再次点击“下一步”,选中“单击完成时打开财产对话框”复选框,然后单击“完成”
任务已创建,但我们必须做最后一件事,以确保一切正常。将打开一个新窗口,其中显示您创建的任务的摘要,但它仅设置为在您登录时运行。我们需要选择显示“运行用户是否登录”的单选按钮,然后按“确定”
现在,让我们用两种方式测试我们的任务。首先,在任务调度器的主窗口中,向下滚动直到看到任务名称。如果您使用了名称“cron”,那么应该可以在列表的顶部找到它。右键单击任务并选择“运行”
然后,返回WSL终端并输入sudo服务cron状态,它应该会显示cron正在运行。如果不是,请再次检查您在前面的步骤中输入的所有内容是否正确。
如果在第一次检查中一切正常,那么是时候进行大测试了。重新启动PC,当您返回时,打开WSL终端并运行sudo服务cron状态,该状态应报告cron正在运行。
祝贺您已经迈出了迈向更大、自动化世界的第一步。当cron在后台运行时,您在WSL中配置的cronjobs将自动按计划运行。