无法在docker容器的crontab中运行R脚本

时间:2019-10-09 04:20:57

标签: r docker cron cron-task

我正在尝试在docker容器中运行R脚本。这是示例。

我的工作目录如下。

myRDocker
  -dockerfile
  -scripts
     -save_iris.R

在目录myRDocker中,有一个dockerfile和一个目录scripts,其中包含一个R脚本save_iris.R

我的R脚本save_iris.R如下:

write.csv(iris, '/data/iris.csv')

我的dockerfile如下:

# Install R version 3.6
FROM r-base:3.6.0

#install crontab
RUN apt-get update && apt-get -y install cron

RUN mkdir /data
COPY /scripts  /scripts

我去了目录myRDocker并构建了Docker镜像

docker build -t baser .

我在bash中运行docker容器。

docker run -it baser bash

进入容器后,我做了:

crontab -e

然后添加此行,然后保存

* * * * * Rscript /scripts/save_iris.R

它应该每分钟将文件保存到文件夹/data中。但是,我从未在容器内的数据文件夹中找到任何文件。

我的问题是:

  1. 我在上述过程中做错了什么?我觉得我可能会遗漏一些东西。。。。。。。

  2. 如果我想在容器启动时运行计划的cron任务,该怎么办。 (就像将cron任务放在文件中,然后在容器启动时运行...。)

1 个答案:

答案 0 :(得分:2)

为什么不在容器运行时启动cronjob,而不是在容器启动后运行?另外,我不认为crontab进程会在您的情况下运行,因为您的容器没有执行任何操作。

尝试此操作,它将在容器运行时开始cron,并且还会尾随cron作业的日志。但请记住,在这种情况下,您的主要流程是tail -f /var/log/cron.log而不是cron流程。

 FROM r-base:3.6.0

 RUN apt-get update &&  apt-get -y install cron

 RUN touch /var/log/cron.log
 COPY hello.r /hello.r
 RUN (crontab -l ; echo "* * * * * Rscript /hello.r  >> /var/log/cron.log") | crontab

# Run the command on container startup
 CMD cron && tail -f /var/log/cron.log

因此,您将把Rscript控制台日志发送到Container stdout。

hello.r

print("Hello World from R")

enter image description here