我在 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.sh
sudo
无密码. 运行以下命令来生成必须放在 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 分钟即可完成设置 这里
简而言之:
在基本 Windows Shell 应用程序中执行 shell:startup
这将打开文件夹“C:\Users****\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”
添加快捷方式“wsl.exe”,目标为“C:\Windows\System32\wsl.exe sudo /etc/init.d/cron start”
通过“sudo visudo”编辑 sudo 配置文件
在文件中添加“%sudo ALL=NOPASSWD: /etc/init.d/cron start”以防止 cron 服务的管理员密码