Crontab 永远不会在 Linux 的 Windows 子系统中执行

问题描述 投票:0回答:5

我不久前使用

crontab -e
设置了一些 cronjobs。我的 crontab 包含以下行:

* * * * * /usr/bin/touch /home/blah/MADEBYCRON

我这样做已经好几个星期了。我从来没有见过

/home/blah/MADEBYCRON
。我在我的主目录上设置了权限,所以它应该能够在这个目录中创建文件,那么为什么这个文件永远不存在?

/var/log/syslog
不存在。

bash cron windows-subsystem-for-linux
5个回答
60
投票

确保 cron 服务正在运行。我每天使用 WSL 和 cron 来使用 rsync 进行本地备份,所以这应该可以工作。

使用

which cron
检查其已安装,我的说
/usr/sbin/cron

使用

crontab -l
列出您配置的作业。

使用

ps aux | grep cron
查看 cron 是否正在运行,如果运行,您应该会看到
/usr/sbin/cron

使用

service cron status
检查服务是否启动。

如果 cron 服务未运行,请使用

sudo service cron start
启动它。


3
投票

由于 WSL 不会在启动时启动服务,如果您想在

rsyslog
中查看
cron
日志,您还需要在启动 cron 之前启动
/var/log/syslog
:

sudo service rsyslog start
sudo service cron start

然后查看日志

grep -i cron /var/log/syslog

syslog
仅包含运行哪个脚本以及何时运行的信息。如果您想查看脚本的输出,您需要将其重定向到文件,例如像这样:

* * * * * /usr/bin/touch /home/blah/MADEBYCRON >> /home/blah/cron_output.log 2>&1

2
投票

在最近的 WSL 版本中,您可以启用 Systemd 支持,如本社区 Wiki 答案中所述。使用 Systemd,当您启动 WSL 发行版时,

cron
服务(单元)应该自动启动。

请注意,WSL 下不需要 Systemd,并且可能会增加额外的、不需要的开销。如果您不需要 Systemd 支持,请考虑使用其他现有答案之一。


1
投票

您需要启动

cron
服务。请注意,服务会在 WSL 上自动启动,因为 ist 不使用
systemd
。最简单的方法是将以下行添加到您的
.bashrc
:

service cron status || sudo service cron start

第一次启动时,您需要输入

sudo
密码,您将看到类似这样的内容


0
投票

最近的 WSL 版本还提供了在启动 WSL 映像时执行自定义命令的可能性。有关详细信息和示例,请参阅 https://superuser.com/a/1685207/7833

简而言之,要使

cron
在启动 WSL 映像时自动启动,请在运行的 WSL Linux 中创建或编辑(如
sudo
/etc/wsl.conf
文件。

然后使用以下行添加或扩展

[boot]
部分,该行会在图像启动时自动启动
cron

[boot]
command="service cron start"

这应该可以解决问题,并在 WSL 映像中为您提供一个正在运行的 cron。

如果您已经有一个现有的启动/命令配置,请注意,您在该配置中具有链命令以使其工作,例如:

[boot]
command="<existing commands> ; service cron start"
© www.soinside.com 2019 - 2024. All rights reserved.