การจัดกำหนดการสคริปต์ R


113

ฉันได้เขียนสคริปต์ R ที่ดึงข้อมูลบางส่วนจากฐานข้อมูลดำเนินการหลายอย่างกับมันและโพสต์ผลลัพธ์ไปยังฐานข้อมูลใหม่

ฉันต้องการให้สคริปต์นี้ทำงานทุกวันในเวลาที่กำหนด แต่ฉันไม่พบวิธีใดที่จะทำให้สิ่งนี้ได้ผล

ใครสามารถแนะนำแหล่งข้อมูลที่ฉันสามารถดูเพื่อแก้ปัญหานี้ได้ ฉันกำลังเรียกใช้สคริปต์นี้บนเครื่อง Windows

คำตอบ:


108

ที่จริงภายใต้ Windows คุณไม่ได้มีการสร้างไฟล์ชุดแรกที่ใช้จัดตารางเวลา

  • เปิดตัวกำหนดตารางเวลา: START -> All Programs -> Accesories -> System Tools -> Scheduler
  • สร้างงานใหม่
  • ภายใต้แท็บการดำเนินการสร้างการกระทำใหม่
  • เลือกเริ่มโปรแกรม
  • เรียกดูRscript.exeซึ่งควรวางไว้ที่นี่:
    "C: \ Program Files \ R \ R-3.0.2 \ bin \ x64 \ Rscript.exe"
  • ป้อนชื่อไฟล์ของคุณในฟิลด์พารามิเตอร์
  • ป้อนเส้นทางที่จะพบสคริปต์ในฟิลด์เริ่มต้นใน
  • ไปที่แท็บทริกเกอร์
  • สร้างทริกเกอร์ใหม่
  • เลือกงานที่ควรทำในแต่ละวันเดือน ... ทำซ้ำหลาย ๆ ครั้งหรืออะไรก็ได้ที่คุณต้องการ

3
ใช่ขอบคุณ! นี่คือสิ่งที่ใช้ได้ผลสำหรับฉันไม่ใช่ข้างต้นและไม่ใช่คำตอบอื่น ๆ ที่ลอยอยู่ในเว็บ ฉันเพียงจะเพิ่มทำให้แน่ใจว่านามสกุลไฟล์เป็นและไม่.R .r
esa606

คุณหมายถึงอะไรกันแน่ - คุณคาดหวังว่าจะเกิดอะไรขึ้น? บางทีนี่อาจเป็นคำถามของตัวเอง (อาจมีคำตอบอยู่แล้วใน SO)
petermeissner

1
มีวิธีย่อหน้าต่าง dos หรือไม่?
George Dontas

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 Tasks ผ่าน Windows Task Scheduler (โพสต์เมื่อ 11 กุมภาพันธ์ 2015)

taskcheduleR: แพ็คเกจ R เพื่อจัดกำหนดการสคริปต์ R ด้วยตัวจัดการงาน Windows (โพสต์เมื่อ 17 มีนาคม 2559)

แก้ไข

ฉันเพิ่งนำการใช้ไฟล์แบตช์มาใช้อีกครั้งเพราะฉันต้องการให้หน้าต่าง cmd ย่อเล็กสุด (ฉันหาวิธีอื่นไม่เจอ)

โดยเฉพาะฉันกรอกActionsแท็บตัวกำหนดตารางเวลางานของ windows ดังนี้:

Program/script:

cmd.exe

Add arguments (optional):

/ c เริ่ม / นาที D: \ mydocuments \ mytest.bat ^ & exit

เนื้อหาของ mytest.bat :

C: \ R \ R-3.5.2 \ bin \ x64 \ Rscript.exe D: \ mydocuments \ mytest.r พารามิเตอร์


16
ใช้เป็นที่นิยมRscript R BATCHระบบที่สามารถแยกความแตกต่างระหว่างตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ได้rเช่นกัน
Dirk Eddelbuettel

ขอบคุณฉันไม่ได้ใช้มัน อย่างที่ฉันเห็นอาร์กิวเมนต์สามารถส่งผ่านไปยังสคริปต์และเข้าถึงได้โดยใช้ commandArgs
George Dontas

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.**

ใส่คำอธิบายภาพที่นี่


สิ่งนี้ไม่ได้ผลสำหรับฉัน เมื่อฉันพยายามเรียกใช้ Addin ฉันได้รับข้อผิดพลาดต่อไปนี้: การโหลดเนมสเปซที่ต้องการ: มันวาวล้มเหลวด้วยข้อผิดพลาด: 'จำนวนคอลัมน์ของเมทริกซ์ต้องตรงกัน (ดูอาร์กิวเมนต์ 2)' การโหลดเนมสเปซที่ต้องการ: miniUI ล้มเหลวด้วยข้อผิดพลาด: 'จำนวนคอลัมน์ ของเมทริกซ์ต้องตรงกัน (ดู arg 2) 'Error in rbind (info, getNamespaceInfo (env, "S3methods")): จำนวนคอลัมน์ของเมทริกซ์ต้องตรงกัน (ดู arg 2)
obewanjacobi

เพิ่งอัปเดต data.table เพื่อลองและแก้ไขข้อผิดพลาดนี้และตอนนี้ฉันได้รับสิ่งต่อไปนี้: ข้อผิดพลาด: ไม่พบ object 'as.xts' ในขณะที่โหลด namespace '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สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ รายละเอียดเพิ่มเติมที่เว็บไซต์ของไมโครซอฟท์



3

การตั้งค่าตัวกำหนดตารางงาน

ขั้นตอนที่ 1) เปิดตัวกำหนดตารางเวลางาน (เริ่ม> ค้นหาตัวกำหนดเวลางาน)

ขั้นตอนที่ 2) คลิก "Action"> "Create Task"

ขั้นตอนที่ 3) เลือก "เรียกใช้เฉพาะเมื่อผู้ใช้เข้าสู่ระบบ" ยกเลิกการเลือก "Run with maximum priveledges" ตั้งชื่องานกำหนดค่าสำหรับ "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 ที่กำหนดเวลาไว้ใน Task Scheduler

เมื่อคุณเรียกใช้สคริปต์โดยใช้ Task Scheduler การแก้ไขปัญหาใด ๆ เป็นเรื่องยากเนื่องจากคุณไม่ได้รับข้อความแสดงข้อผิดพลาดใด ๆ

สิ่งนี้สามารถแก้ไขได้โดยใช้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")

1

หลังจากทำตามขั้นตอนเหล่านี้รวมกันและคุณได้รับ"Argument Batch Ignored"ข้อผิดพลาดหลังจากที่ R.exe ทำงานลองสิ่งนี้มันใช้ได้กับฉัน

ใน Windows Task Scheduler:

แทนที่BATCH "C:\Users\desktop\yourscript.R"ในฟิลด์อาร์กิวเมนต์

กับ

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


1
สิ่งนี้จะสมเหตุสมผลเมื่อแสดงความคิดเห็นเกี่ยวกับคำตอบของ Mark Byers (หรืออาจเป็นการแก้ไขคำตอบนั้น) ฉันไม่คิดว่ามันจะอยู่คนเดียวได้
Gregor Thomas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.