我不久前使用
crontab -e
设置了一些 cronjobs。我的 crontab 包含以下行:
* * * * * /usr/bin/touch /home/blah/MADEBYCRON
我这样做已经好几个星期了。我从来没有见过
/home/blah/MADEBYCRON
。我在我的主目录上设置了权限,所以它应该能够在这个目录中创建文件,那么为什么这个文件永远不存在?
/var/log/syslog
不存在。
确保 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
启动它。
由于 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
在最近的 WSL 版本中,您可以启用 Systemd 支持,如本社区 Wiki 答案中所述。使用 Systemd,当您启动 WSL 发行版时,
cron
服务(单元)应该自动启动。
请注意,WSL 下不需要 Systemd,并且可能会增加额外的、不需要的开销。如果您不需要 Systemd 支持,请考虑使用其他现有答案之一。
最近的 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"