Lập lịch R Script


113

Tôi đã viết một tập lệnh R để kéo một số dữ liệu từ cơ sở dữ liệu, thực hiện một số thao tác trên đó và đăng đầu ra lên cơ sở dữ liệu mới.

Tôi muốn tập lệnh này chạy hàng ngày vào một thời điểm cụ thể nhưng tôi không thể tìm thấy bất kỳ cách nào để thực hiện việc này một cách hiệu quả.

Bất cứ ai có thể giới thiệu một tài nguyên mà tôi có thể xem để giải quyết vấn đề này? Tôi đang chạy tập lệnh này trên máy Windows.

Câu trả lời:


108

Trên thực tế, trong Windows, bạn thậm chí không phải tạo một tệp hàng loạt trước để sử dụng Bộ lập lịch .

  • Mở bộ lập lịch: START -> All Programs -> Accesories -> System Tools -> Scheduler
  • Tạo một Nhiệm vụ mới
  • trong tab Hành động, tạo một hành động mới
  • chọn Bắt đầu Chương trình
  • duyệt đến Rscript.exe nên được đặt ví dụ ở đây:
    "C: \ Program Files \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • nhập tên của tập tin của bạn trong các thông số lĩnh vực
  • nhập đường dẫn nơi tập lệnh được tìm thấy trong trường Bắt đầu trong trường
  • chuyển đến tab Trình kích hoạt
  • tạo trình kích hoạt mới
  • chọn nhiệm vụ nên làm hàng ngày , hàng tháng, ... lặp đi lặp lại nhiều lần, hoặc bất cứ điều gì bạn thích

3
Vâng, cảm ơn! Đây là những gì hiệu quả với tôi, không phải ở trên và không phải là những câu trả lời khác đang trôi nổi trên mạng. Tôi sẽ chỉ thêm rằng đảm bảo rằng phần mở rộng tệp là .Rvà KHÔNG .r.
esa606

Chính xác thì ý bạn là gì - bạn mong đợi điều gì sẽ xảy ra? Có lẽ điều này sẽ trở thành một câu hỏi của riêng nó (có thể đã có câu trả lời trên SO).
petermeissner

1
Có cách nào để thu nhỏ cửa sổ dos không?
George Dontas

58

Giả sử tập lệnh R của bạn mytest.rnằm trong đó D:\mydocuments\, bạn có thể tạo một tệp hàng loạt bao gồm lệnh sau:

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

Sau đó, thêm nó, như một tác vụ mới, vào bộ lập lịch tác vụ windows, đặt ở đó các điều kiện kích hoạt.

Bạn cũng có thể bỏ qua tệp hàng loạt. Đặt C:\R\R-2.10.1\bin\Rcmd.exetrong program/scripthộp văn bản trong bộ lập lịch tác vụ và cung cấp Argumentsphần còn lại của lệnh ban đầu:BATCH D:\mydocuments\mytest.r

Lập lịch R Tasks qua Windows Task Scheduler (Đăng vào ngày 11 tháng 2 năm 2015)

taskcheduleR: Gói R để lên lịch cho các tập lệnh R với trình quản lý tác vụ Windows (Đăng vào ngày 17 tháng 3 năm 2016)

BIÊN TẬP

Gần đây tôi đã áp dụng lại việc sử dụng các tệp hàng loạt vì tôi muốn cửa sổ cmd được thu nhỏ (tôi không thể tìm được cách khác).

Cụ thể, tôi điền vào Actionstab lập lịch tác vụ của windows như sau:

Program/script:

cmd.exe

Add arguments (optional):

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

Nội dung của mytest.bat :

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


16
Sử dụng Rscriptlà thích hợp hơn R BATCH. Các hệ thống có thể phân biệt giữa chữ thường và chữ hoa rcũng nhận được .
Dirk Eddelbuettel

Cảm ơn, tôi đã không sử dụng nó. Như tôi đã thấy, các đối số cũng có thể được chuyển đến tập lệnh và được truy cập bằng commandArgs
George Dontas

5

Bây giờ có tùy chọn tích hợp trong RStudio để thực hiện việc này, để chạy bộ lập lịch trước tiên hãy cài đặt các gói bên dưới

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

Sau khi cài đặt, hãy truy cập

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

nhập mô tả hình ảnh ở đây


Điều này không hiệu quả với tôi. Khi tôi cố gắng chạy Addin, tôi gặp các lỗi sau: Đang tải không gian tên bắt buộc: bóng Không thành công với lỗi: 'số cột của ma trận phải khớp (xem đối số 2)' Đang tải không gian tên bắt buộc: miniUI Không thành công với lỗi: 'số cột các ma trận phải phù hợp (xem arg 2)' Lỗi trong rbind (thông tin, getNamespaceInfo (env, "S3methods")): số cột của ma trận phải phù hợp (xem arg 2)
obewanjacobi

Vừa cập nhật data.table để thử và sửa lỗi này và bây giờ tôi nhận được lỗi sau: Lỗi: không tìm thấy đối tượng 'as.xts' trong khi tải không gian tên 'data.table'
obewanjacobi 13/08/19

1
RStudio có cần phải mở để chúng hoạt động không?
cgage1

1
Tôi nghĩ nếu R studio đóng cửa nó sẽ tự động mở và chạy kịch bản.
Zeeshan

4

Tôi thiết lập nhiệm vụ của mình thông qua SCHTASKSchương trình. Để chạy các tập lệnh khi khởi động, bạn sẽ viết một cái gì đó dọc theo dòng

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

Xem trang web này để biết thêm chi tiết SCHTASKS. Thông tin chi tiết tại trang web của Microsoft .



2

Thiết lập trình lên lịch tác vụ

Bước 1) Mở bộ lập lịch tác vụ (Bắt đầu> tìm kiếm Bộ lập lịch tác vụ)

Bước 2) Nhấp vào "Hành động"> "Tạo tác vụ"

Bước 3) Chọn "Chỉ chạy khi người dùng đã đăng nhập", bỏ chọn "Chạy với mức giá cao nhất", đặt tên cho nhiệm vụ của bạn, cấu hình cho "Windows Vista / Windows Server 2008"

nhập mô tả hình ảnh ở đây

Bước 4) Trong tab "Trình kích hoạt", đặt thời điểm bạn muốn tập lệnh chạy

Bước 5) Trong tab "Tác vụ", đặt vị trí đầy đủ của tệp Rscript.exe, tức là

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

Đặt tên tập lệnh của bạn với -esource()trong các đối số bao bọc nó như sau:

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

nhập mô tả hình ảnh ở đây

Khắc phục sự cố Rscript được lên lịch trong Trình lập lịch tác vụ

Khi bạn chạy tập lệnh bằng Trình lập lịch tác vụ, rất khó để khắc phục bất kỳ sự cố nào vì bạn không nhận được bất kỳ thông báo lỗi nào.

Điều này có thể được giải quyết bằng cách sử dụng sink()hàm trong R cho phép bạn xuất tất cả các thông báo lỗi vào một tệp mà bạn chỉ định. Đây là cách bạn có thể làm điều này:

# 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

})

Điều khác mà bạn sẽ phải thay đổi để làm cho Rscript của bạn hoạt động là chỉ định đường dẫn tệp đầy đủ của bất kỳ đường dẫn tệp nào trong tập lệnh của bạn.

Điều này sẽ không hoạt động trong bộ lập lịch tác vụ:

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

Bạn sẽ cần chỉ định đường dẫn tệp đầy đủ của bất kỳ tập lệnh nào bạn đang tìm nguồn trong Rscript của mình:

source("C:/location_of_my_script/functions/import_function.R")

1

Sau khi làm theo bất kỳ sự kết hợp nào của các bước này và bạn nhận được "Argument Batch Ignored"lỗi sau khi R.exe chạy, hãy thử điều này, nó hoạt động với tôi.

Trong Windows Task Scheduler:

Thay thế BATCH "C:\Users\desktop\yourscript.R"trong trường đối số

với

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


1
Điều này sẽ có ý nghĩa như một nhận xét về câu trả lời của Mark Byers (hoặc có thể là một chỉnh sửa cho câu trả lời đó), tôi không nghĩ rằng nó có thể đứng một mình.
Gregor Thomas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.