簡體   English   中英

無法在 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')

我的 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 任務放在一個文件中,並在容器啟動時運行......)

為什么您不在容器運行時啟動 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 標准輸出。

你好。r

print("Hello World from R")

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM