无法在 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
。但是,我从来没有在容器内的数据文件夹中找到任何文件。
我的问题是:
我在上面的过程中做错了什么?我觉得我可能遗漏了一些东西......但无法弄清楚为什么......
如果我想在容器启动时运行计划的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")
我正尝试在 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
。但是,我从来没有在容器内的数据文件夹中找到任何文件。
我的问题是:
我在上面的过程中做错了什么?我觉得我可能遗漏了一些东西......但无法弄清楚为什么......
如果我想在容器启动时运行计划的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")