Agendamento de script R

113

Escrevi um script R que extrai alguns dados de um banco de dados, executa várias operações nele e publica a saída em um novo banco de dados.

Gostaria que este script fosse executado todos os dias em um horário específico, mas não consigo encontrar nenhuma maneira de fazer isso de forma eficaz.

Alguém pode recomendar um recurso que eu possa consultar para resolver esse problema? Estou executando este script em uma máquina Windows.

ETD
fonte

Respostas:

108

Na verdade, no Windows, você não precisa nem criar um arquivo em lote primeiro para usar o Scheduler .

  • Abra o programador: INICIAR -> Todos os programas -> Acessórios -> Ferramentas do sistema -> Programador
  • Crie uma nova tarefa
  • na guia Ação, crie uma nova ação
  • escolha Iniciar programa
  • navegue até Rscript.exe que deve ser colocado, por exemplo, aqui:
    "C: \ Arquivos de programas \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • insira o nome do seu arquivo no campo de parâmetros
  • insira o caminho onde o script deve ser encontrado no campo Iniciar em
  • vá para a guia Triggers
  • criar novo gatilho
  • escolha que a tarefa deve ser feita a cada dia , mês, ... repetida várias vezes, ou o que você quiser
Petermeissner
fonte
3
Sim obrigada! Isso é o que funcionou para mim, não o acima e não as várias outras respostas flutuando pela web. Gostaria apenas de acrescentar que certifique-se de que a extensão do arquivo é .Re NÃO .r.
esa606
O que exatamente você quer dizer com isso - o que você espera que aconteça? Talvez isso deva entrar em uma questão própria (talvez já haja uma resposta no SO).
petermeissner
1
Existe uma maneira de minimizar a janela DOS?
George Dontas
58

Supondo que seu script R esteja mytest.r, localizado em D:\mydocuments\, você pode criar um arquivo em lote incluindo o seguinte comando:

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

Em seguida, adicione-o, como uma nova tarefa, ao agendador de tarefas do Windows, definindo lá as condições de disparo.

Você também pode omitir o arquivo em lote. Defina C:\R\R-2.10.1\bin\Rcmd.exena program/scriptcaixa de texto no agendador de tarefas e forneça como Argumentso resto do comando inicial:BATCH D:\mydocuments\mytest.r

Agendando tarefas R por meio do Agendador de tarefas do Windows (Postado em 11 de fevereiro de 2015)

taskscheduleR: pacote R para agendar scripts R com o gerenciador de tarefas do Windows (Postado em 17 de março de 2016)

EDITAR

Recentemente, adotei o uso de arquivos em lote novamente, porque queria que a janela cmd fosse minimizada (não consegui encontrar outra maneira).

Especificamente, preencho a Actionsguia do agendador de tarefas do Windows da seguinte maneira:

Program/script:

cmd.exe

Add arguments (optional):

/ c start / min D: \ mydocuments \ mytest.bat ^ & exit

Conteúdo de mytest.bat :

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

George Dontas
fonte
16
Usar Rscripté preferível R BATCH. Os sistemas que podem diferenciar entre maiúsculas e minúsculas também obtêm r.
Dirk Eddelbuettel
Obrigado, eu não tinha usado. Como eu vi, os argumentos também podem ser passados ​​para o script e acessados ​​usando commandArgs
George Dontas
5

Agora existe uma opção embutida no RStudio para fazer isso, para executar o programador primeiro instale abaixo dos pacotes

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

Depois de instalar, vá para

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

insira a descrição da imagem aqui

Zeeshan
fonte
Isso não funciona para mim. Quando tento executar o addin, obtenho os seguintes erros: Carregando namespace necessário: brilhante Falha com erro: 'número de colunas de matrizes deve corresponder (consulte arg 2)' Carregando namespace necessário: miniUI Falha com erro: 'número de colunas de matrizes deve corresponder (ver arg 2) 'Erro em rbind (info, getNamespaceInfo (env, "S3methods")): o número de colunas de matrizes deve corresponder (ver arg 2)
obewanjacobi
Acabei de atualizar data.table para tentar corrigir esse erro, e agora recebo o seguinte: Erro: objeto 'as.xts' não encontrado durante o carregamento do namespace 'data.table'
obewanjacobi
1
O RStudio precisa permanecer aberto para que funcionem?
cgage1
1
Acho que se o R Studio estiver fechado, ele o abrirá automaticamente e executará o script.
Zeeshan,
4

Eu configurei minhas tarefas por meio do SCHTASKSprograma. Para executar scripts na inicialização, você escreveria algo ao longo das linhas de

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

Consulte este site para obter mais detalhes sobre SCHTASKS. Mais detalhes no site da Microsoft .

Roman Luštrik
fonte
3

Configurando o agendador de tarefas

Etapa 1) Abra o agendador de tarefas (Iniciar> pesquisar o Agendador de tarefas)

Etapa 2) Clique em "Ação"> "Criar Tarefa"

Etapa 3) Selecione "Executar apenas quando o usuário estiver conectado", desmarque "Executar com privilégios mais altos", nomeie sua tarefa, configure para "Windows Vista / Windows Server 2008"

insira a descrição da imagem aqui

Etapa 4) Na guia "Triggers", defina quando deseja que o script seja executado

Etapa 5) Na guia "Ações", coloque a localização completa do arquivo Rscript.exe, ou seja,

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

Coloque o nome do seu script com -ee source()em argumentos, envolvendo-o assim:

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

insira a descrição da imagem aqui

Solução de problemas de um Rscript agendado no Agendador de tarefas

Quando você executa um script usando o Agendador de tarefas, é difícil solucionar quaisquer problemas porque você não recebe nenhuma mensagem de erro.

Isso pode ser resolvido usando a sink()função em R, que permitirá a saída de todas as mensagens de erro para um arquivo que você especificar. Veja como você pode fazer isso:

# 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

})

A outra coisa que você terá que mudar para fazer seu Rscript funcionar é especificar o caminho completo de qualquer caminho de arquivo em seu script.

Isso não funcionará no agendador de tarefas:

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

Você precisará especificar o caminho completo do arquivo de todos os scripts que você está fornecendo em seu Rscript:

source("C:/location_of_my_script/functions/import_function.R")
ben.watson.ca
fonte
1

Depois de seguir qualquer combinação dessas etapas e receber o "Argument Batch Ignored"erro após a execução de R.exe, tente fazer isso, funcionou para mim.

No Windows Task Scheduler:

Substitua BATCH "C:\Users\desktop\yourscript.R"no campo de argumentos

com

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

Starbucks
fonte
1
Isso faria sentido como um comentário sobre a resposta de Mark Byers (ou talvez uma edição para essa resposta), eu não acho que pode ser independente.
Gregor Thomas