crontab无法正常工作ubuntu 16.04

时间:2016-09-06 11:56:27

标签: ubuntu docker cron crontab ubuntu-16.04

我已经提到了10个类似问题的链接但没有一个有效。我在 ubuntu 16.04 docker container 中工作。我正在尝试设置cron工作。我引用了这个link来安装cron。

用于在crontab -e(作为root用户)

中添加以下行的demo
* * * * * 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'

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

    任何人都可以帮我解决我在这里做错的事吗?

    更新

    我尝试了@BMitch答案的相同复制,但这也会产生同样的问题。我等了五分钟以上,但在/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"
    

1 个答案:

答案 0 :(得分:2)

Docker是一种应用程序隔离工具,与虚拟机是操作系统隔离工具的方式不同。这意味着您在Docker容器内运行应用程序,并且在该容器中默认情况下没有其他OS服务组件正在运行。因此,如果您配置了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:/#