【问题标题】:crontab not working ubuntu 16.04crontab 不工作 ubuntu 16.04
【发布时间】:2017-01-13 21:06:24
【问题描述】:

我已经参考了 10 多个类似问题的链接,但没有一个有效。我在 ubuntu 16.04 docker 容器 中工作。我正在尝试设置 cron 作业。我推荐了这个link 来安装cron。

为了制作演示,在crontab -e中添加以下行(作为root用户)

* * * * * echo "Run this command every minute" >> /var/www/public/cronfile.log 

保存文件时会通知crontab: installing new crontab,但在指定位置没有创建文件。

以下步骤是我试图解决这些问题,但没有一个有效。

  1. 将 crontab SHELL=/bin/sh 更改为 SHELL=/bin/bash
  2. 在 crontab -e 中追加 2>&1

    * * * * * echo "Run this command every minute" >> /var/www/public/cronfile.log 2>&1

  3. 检查权限/etc/crontab(root用户我也以root用户crontab -e运行)

  4. 我在 /var/log/ 中找不到任何日志文件。也找不到 var/log/syslog。请注意,它是一个 ubuntu docker 容器。我已尝试使用以下命令,但找不到任何与 cron 相关的日志。

    find / -type f -name '*.log'

注意: 其实问题的根源来自here。如果您需要任何其他信息,请在评论中提及。

任何人都可以帮助我在这里做错了什么吗?


更新

我尝试了@BMitch 答案的相同复制,但这也会产生相同的问题。我等了超过 5 分钟,但在 /var/www/public/cronfile.log 中没有生成 cron 日志文件,请看我的资料

[root@bu bu]# docker run -it --rm ubuntu
root@a256be07f23a:/# ( apt-get update && apt-get install cron ) >/install.log 2>&1
root@a256be07f23a:/# service cron start
 * Starting periodic command scheduler cron                                                              [ OK ] 
root@a256be07f23a:/# mkdir -p /var/www/public
root@a256be07f23a:/# crontab - <<EOF
> * * * * * echo "Run this command every minute" >> /var/www/public/cronfile.log
> EOF
root@a256be07f23a:/# crontab -l
* * * * * echo "Run this command every minute" >> /var/www/public/cronfile.log
root@a256be07f23a:/# date
Fri Sep  9 04:47:50 UTC 2016
root@a256be07f23a:/# date
Fri Sep  9 04:50:59 UTC 2016
root@a256be07f23a:/# ls -al /var/www/public
total 0
drwxr-xr-x 2 root root  6 Sep  9 04:47 .
drwxr-xr-x 3 root root 20 Sep  9 04:47 ..
root@a256be07f23a:/# date
Fri Sep  9 04:51:21 UTC 2016
root@a256be07f23a:/# ls -l /var/spool/cron/crontabs/
total 4
-rw------- 1 root crontab 254 Sep  9 04:47 root
root@a256be07f23a:/# 

版本检查

root@660f8f6d128e:/# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"

【问题讨论】:

  • 我不知道这个问题有什么问题。请说明投反对票的原因,否则错误仍然存​​在。

标签: ubuntu docker cron crontab ubuntu-16.04


【解决方案1】:

Docker 是一个应用程序隔离工具,不像虚拟机是一个操作系统隔离工具。这意味着您在 Docker 容器中运行您的应用程序,并且在该容器中,默认情况下没有其他操作系统服务组件正在运行。因此,如果您配置您的 crontab,您就不会运行 cron 守护程序来处理该文件并启动作业。要为您运行此程序,需要运行 cron -f 以在前台启动守护程序。如果您的容器运行另一个应用程序(很可能),那么您需要像 supervisord 这样的工具来启动多个应用程序以同时运行 cron。


编辑:这是我在启动 cron 后尝试在我的实验室中重现您的错误。如您所见,该文件是为我创建的:

$ docker run -it --rm ubuntu
root@f2e78e1bacde:/# ( apt-get update && apt-get install cron ) >/install.log 2>&1
root@f2e78e1bacde:/# service cron start
 * Starting periodic command scheduler 
root@f2e78e1bacde:/# mkdir -p /var/www/public
root@f2e78e1bacde:/# crontab - <<EOF
> * * * * * echo "Run this command every minute" >> /var/www/public/cronfile.log
> EOF
root@f2e78e1bacde:/# crontab -l
* * * * * echo "Run this command every minute" >> /var/www/public/cronfile.log
root@f2e78e1bacde:/# ls -al /var/www/public
total 12
drwxr-xr-x 2 root root 4096 Sep  7 11:54 .
drwxr-xr-x 3 root root 4096 Sep  7 11:53 ..
-rw-r--r-- 1 root root   30 Sep  7 11:54 cronfile.log
root@f2e78e1bacde:/# date
Wed Sep  7 11:54:18 UTC 2016
root@f2e78e1bacde:/# ls -l /var/spool/cron/crontabs/
total 4
-rw------- 1 root crontab 255 Sep  7 11:53 root
root@f2e78e1bacde:/#

【讨论】:

  • 我 100% 确定 cron 已经在运行。 “docker exec -it ubuntu /bin/bash”。此命令将我带到 ubuntu 终端,我可以安装 cron,然后在检查它正在运行的状态时运行“service cron start”。在那之后,只有我尝试了上面提到的所有内容。顺便说一句,我也尝试了您的解决方案 cron -f 但它抛出“无法为指定会话创建/删除条目”。这里有什么我错了吗?请在评论中提及。
  • 随着 cron 的运行,我无法重现您的问题。我的根 crontab 按预期在 /var/spool/cron/crontabs/root 中创建,在创建 /var/www/public 目录后, /var/www/public/cronfile.log 使用更改每个的日期戳创建分钟。当 cron 停止并使用cron -f 启动它时,我也没有看到任何错误。由于您没有在问题中提到您正在启动 cron,因此可能还有其他未提及的内容对您造成了影响。
  • 感谢您的努力!我已经完成了您更新的操作,请查看我更新的问题。从昨天开始,我做了 30 多次相同的事情 :-) cron 有任何错误日志(例如 /var/log/httpd/error.log 中的 apache 错误日志)
  • 我注意到您没有使用 docker run 命令从干净的容器开始更新。请包括重现您的问题所需的所有内容。
  • 请看我更新的问题,我完全按照你的做法做了。我也试过在我正在运行的容器中,但问题仍然存在。请查看codeshare.io/T82Nd
猜你喜欢
  • 2015-12-28
  • 2013-10-27
  • 1970-01-01
  • 2018-08-06
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多