невозможно запустить скрипт R в crontab в контейнере Docker - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь запустить скрипт R внутри Docker-контейнера. Вот пример.

Мой рабочий каталог, как показано ниже.

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 .

Я запускаюконтейнер докера в bash.

docker run -it baser bash

После того, как я попал в контейнер, я сделал:

crontab -e

, затем добавил эту строку, затем сохранил

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

Следует сохранять файл в папку /data каждую минуту. Тем не менее, я никогда не находил никаких файлов в папке данных внутри контейнера.

Мой вопрос:

  1. Что я сделал не так в вышеуказанной процедуре? Я чувствую, что могу что-то упустить .... но не могу понять, почему ...

  2. что мне делать, если я хочу запускать запланированную задачу cron при каждом запуске контейнера. (что-то вроде помещения задачи cron в файл и запуска при запуске контейнера ....)

1 Ответ

1 голос
/ 09 октября 2019

почему вы не запускаете 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 для контейнера stdout.

hello.r

print("Hello World from R")

enter image description here

...