Tul*_*lio 5 cron services windows-subsystem-for-linux
我在 Windows 10 Pro 下运行 Ubuntu 18.04.1 LTS。每次重新启动后,不会启动 cron 守护进程。
我可以手动启动它sudo service cron start
。
我可以配置什么或需要修改什么系统文件,以便在重新启动后启动 cron 守护进程?
正如在 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.sh
的sudo
情况下执行。运行以下命令生成必须放在 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 文件来实现相同的结果如下所示:
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 次 |
最近记录: |