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

unable to run R script in crontab in docker container

我正尝试在 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')

我的 docker 文件如下所示:

# 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 .

我运行 docker 容器在bash.

docker run -it baser bash

进入容器后,我做了:

crontab -e

然后添加这一行,然后保存

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

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

我的问题是:

  1. 我在上面的过程中做错了什么?我觉得我可能遗漏了一些东西......但无法弄清楚为什么......

  2. 如果我想在容器启动时运行计划的cron 任务,我应该怎么做。 (比如将 cron 任务放在一个文件中,并在容器启动时 运行....)

为什么不在容器 运行 时间启动 cronjob,而不是在容器启动后 运行ning?另外,我认为 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 控制台日志发送到容器标准输出。

hello.r

print("Hello World from R")