Планирование сценария R

113

Я написал сценарий R, который извлекает некоторые данные из базы данных, выполняет с ними несколько операций и отправляет результат в новую базу данных.

Я бы хотел, чтобы этот сценарий запускался каждый день в определенное время, но я не могу найти способ сделать это эффективно.

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

расчетное время отправления
источник

Ответы:

108

На самом деле под Windows вам даже не нужно сначала создавать командный файл, чтобы использовать Планировщик .

  • Откройте планировщик: ПУСК -> Все программы -> Аксессуары -> Системные инструменты -> Планировщик
  • Создать новую задачу
  • на вкладке Action создайте новое действие
  • выберите Start Program
  • перейдите к Rscript.exe, который необходимо разместить, например, здесь:
    "C: \ Program Files \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • введите имя вашего файла в поле параметров
  • введите путь, по которому должен быть найден скрипт, в поле Начать в
  • перейдите на вкладку Триггеры
  • создать новый триггер
  • выберите, что задача должна выполняться каждый день , месяц, ... повторяться несколько раз или как вам нравится
Петермейсснер
источник
3
Да спасибо! Это то, что сработало для меня, а не приведенное выше и не различные другие ответы, плавающие в Интернете. Я бы только добавил, что убедитесь, что расширение файла, .Rа НЕ .r.
esa606 09
Что именно вы имеете в виду - чего вы ожидаете? Может быть, это должно стать самостоятельным вопросом (возможно, ответ уже есть на SO).
petermeissner
1
Есть ли способ свернуть окно dos?
Джордж Донтас,
58

Предположим, что ваш R-скрипт mytest.rнаходится в D:\mydocuments\, вы можете создать командный файл, включающий следующую команду:

C:\R\R-2.10.1\bin\Rcmd.exe BATCH D:\mydocuments\mytest.r

Затем добавьте его как новую задачу в планировщик задач Windows, задав там условия запуска.

Вы также можете опустить командный файл. Задайте C:\R\R-2.10.1\bin\Rcmd.exeв program/scriptтекстовом поле планировщика задач и введите в Argumentsкачестве остальной части исходной команды:BATCH D:\mydocuments\mytest.r

Планирование задач R с помощью планировщика задач Windows (опубликовано 11 февраля 2015 г.)

taskcheduleR: пакет R для планирования сценариев R с помощью диспетчера задач Windows ( опубликовано 17 марта 2016 г.)

РЕДАКТИРОВАТЬ

Недавно я снова стал использовать командные файлы, потому что хотел, чтобы окно cmd было свернуто (другого способа найти не удалось).

В частности, я заполняю Actionsвкладку планировщика задач Windows следующим образом:

Program/script:

cmd.exe

Add arguments (optional):

/ c start / min D: \ mydocuments \ mytest.bat ^ & выйти

Содержимое mytest.bat :

C: \ R \ R-3.5.2 \ bin \ x64 \ Rscript.exe D: \ mydocuments \ mytest.r params

Джордж Донтас
источник
16
Использование Rscriptпредпочтительнее R BATCH. Системы, которые могут различать строчные и прописные буквы, также получают r.
Дирк Эддельбюттель
Спасибо, не пользовался. Как я видел, аргументы также могут быть переданы в сценарий и доступны с помощью commandArgs
Джордж Донтас,
5

Теперь в RStudio есть встроенная опция для этого, чтобы запустить планировщик, сначала установите ниже пакетов

  install.packages('data.table')
  install.packages('knitr')
  install.packages('miniUI')
  install.packages('shiny')
  install.packages("taskscheduleR", repos = "http://www.datatailor.be/rcube", type = 
  "source")

После установки перейдите в

**TOOLS -> ADDINS ->BROWSE ADDINS ->taskscheduleR -> Select it and execute it.**

введите описание изображения здесь

Zeeshan
источник
У меня это не работает. Когда я пытаюсь запустить надстройку, я получаю следующие ошибки: Загрузка требуемого пространства имен: блестящий Ошибка с ошибкой: «количество столбцов матриц должно совпадать (см. Аргумент 2)» Загрузка необходимого пространства имен: miniUI Ошибка с ошибкой: »количество столбцов матриц должны совпадать (см. аргумент 2) 'Ошибка в rbind (info, getNamespaceInfo (env, "S3methods")): количество столбцов матриц должно совпадать (см. аргумент 2)
obewanjacobi
Только что обновил data.table, чтобы попытаться исправить эту ошибку, и теперь я получаю следующее: Ошибка: объект as.xts не найден при загрузке пространства имен data.table
obewanjacobi
1
Должен ли RStudio оставаться открытым, чтобы они работали?
cgage1
1
Я думаю, что если R studio закрывается, он автоматически откроет ее и запустит скрипт.
Zeeshan
4

Ставлю задачи через SCHTASKSпрограмму. Для запуска скриптов при запуске вы должны написать что-нибудь вроде

SCHTASKS /Create /SC ONSTART /TN MyProgram /TR "R CMD BATCH --vanilla d:\path\to\script.R"

См. Этот веб-сайт для получения более подробной информации SCHTASKS. Подробности на сайте Microsoft .

Роман Луштрик
источник
3

Настройка планировщика задач

Шаг 1) Откройте планировщик задач (Пуск> поиск в планировщике задач)

Шаг 2) Нажмите «Действие»> «Создать задачу».

Шаг 3) Выберите «Запускать, только когда пользователь вошел в систему», снимите флажок «Запускать с наивысшими привилегиями», назовите свою задачу, настройте для «Windows Vista / Windows Server 2008»

введите описание изображения здесь

Шаг 4) На вкладке «Триггеры» укажите, когда вы хотите, чтобы сценарий запускался.

Шаг 5) На вкладке «Действия» укажите полное расположение файла Rscript.exe, т.е.

"C:\Program Files\R\R-3.6.2\bin\Rscript.exe" (include the quotes)

Поместите имя вашего скрипта с помощью -eи source()в аргументы, обернув его следующим образом:

-e "source('C:/location_of_my_script/test.R')"

введите описание изображения здесь

Устранение неполадок Rscript, запланированного в планировщике заданий

Когда вы запускаете сценарий с помощью планировщика заданий, трудно устранить какие-либо проблемы, потому что вы не получаете сообщений об ошибках.

Это можно решить, используя sink()функцию в R, которая позволит вам выводить все сообщения об ошибках в указанный вами файл. Вот как это можно сделать:

# Set up error log ------------------------------------------------------------
error_log <- file("C:/location_of_my_script/error_log.Rout", open="wt")
sink(error_log, type="message")

try({

# insert your code here

})

Еще одна вещь, которую вам нужно будет изменить, чтобы ваш Rscript заработал, - это указать полный путь к любому файлу в вашем скрипте.

Это не будет работать в планировщике задач:

source("./functions/import_function.R")

Вам нужно будет указать полный путь к файлу любых сценариев, которые вы используете в своем Rscript:

source("C:/location_of_my_script/functions/import_function.R")
ben.watson.ca
источник
1

После выполнения любой комбинации этих шагов вы получите "Argument Batch Ignored" ошибке после запуска R.exe попробуйте это, у меня это сработало.

В планировщике задач Windows:

замещать BATCH "C:\Users\desktop\yourscript.R" в поле аргументов

с участием

CMD BATCH --vanilla --slave "C:\Users\desktop\yourscript.R"

Starbucks
источник
1
Это имело бы смысл в качестве комментария к ответу Марка Байерса (или, может быть, редактированию этого ответа), я не думаю, что он может стоять отдельно.
Грегор Томас