This will source a project file if time and user requirements are met, using a CRON-like syntax (https://cron.help).
schedule_task(
minute,
hour,
day,
month,
weekday,
users,
file,
project_number,
log = TRUE,
ref_time = Sys.time(),
account = connect_planner(),
check_mail = length(users) > 1,
check_log = length(users) > 1,
sent_delay = 15,
sent_account = connect_outlook(),
sent_to = read_secret("mail.error_to"),
log_folder = read_secret("projects.log_path")
)
one or more values between 0-59, or .
or "*"
for each minute
one or more values between 0-23, or .
or "*"
for each hour
one or more values between 1-31, or .
or "*"
for each day
one or more values between 1-12, or .
or "*"
for each mpnth
one or more values between 0-7 (Sunday is both 0 and 7; Monday is 1), or .
or "*"
for each weekday
logged in users, must correspond with Sys.info()["user"]
. Currently logged in user is "runner
". This must be length > 1 if check_mail
is TRUE
.
file name within the project, supports regular expression
number of the project, must be numeric and exist in planner_tasks_list()
a logical to indicate whether this message should be printed: Running scheduled task at...
time to use for reference, defaults to Sys.time()
Planner account
a logical to indicate whether a project was sent by a previous user, by running certemail::mail_is_sent()
a logical to indicate whether a log file exist for the project from a previous user
delay in minutes. This will be multiplied by the position of the current user in users
minus 1. For example, when sent_delay = 15
, this will be 15
for user 2, and 30
for user 3.
Outlook account, to search sent mails
users to send error mail to
path that contains log files
The Windows Task Scheduler must be set up to use this function. Most convenient is to:
Create an R file such as R_cron.R
with calls to schedule_task()
Create a batch file such as R_cron.bat
that runs R_cron.R
with R CMD BATCH
Set up a Task Scheduler task that runs R_cron.bat
every minute
something_to_run <- function() {
1 + 1
}
# units: M H d m wd
schedule_task(., ., ., ., ., "user", "file", 123) # every minute
schedule_task(0, ., ., ., ., "user", "file", 123) # start of each hour
schedule_task(0, 7, ., ., ., "user", "file", 123) # everyday at 7h00
schedule_task(0, 7, 1, ., ., "user", "file", 123) # first day of month at 7h00
schedule_task(0, 7, ., 2, ., "user", "file", 123) # everyday day in February at 7h00
schedule_task(0, 7, ., ., 1, "user", "file", 123) # every Monday at 7h00
schedule_task(0, 7, 1, 2, ., "user", "file", 123) # every 1st of February at 7h00
schedule_task(0, 7, ., 2, 1, "user", "file", 123) # every Monday in February at 7h00
schedule_task(0, 7, 1, 2, 1, "user", "file", 123) # each February 1st if it's a Monday at 7h00
schedule_task(0, 7,29, 2, ., "user", "file", 123) # once every 4 years at 7h00
# examples of combinations
# everyday at 7h00 and 7h30
schedule_task(c(0, 30), 7, ., ., ., "user", "file", 123)
# everyday at 7h00 and 15h00
schedule_task(0, c(7, 15), ., ., ., "user", "file", 123)
# everyday at 7h00 and 7h30 and 15h00 and 15h30
schedule_task(c(0, 30), c(7, 15), ., ., ., "user", "file", 123)
# every second Monday of the month at 7h00:
schedule_task(0, 7, c(8:14), ., 1, "user", "file", 123)
# every 15th of April at 8h30 and 16h30:
schedule_task(30, c(8, 16), 15, 4, ., "user", "file", 123)
# once per quarter at 8h00 on the first day of the month:
schedule_task(0, 8, 1, c(1, 4, 7, 10), ., "user", "file", 123)
# fall-back for failed jobs
# this will run at 8h00 if current user is "user1"
schedule_task(0, 8, ., ., ., c("user1", "user2"), "file", 123)
# it will run again at default 15 minutes later (so, 8h15), if:
# - current user is "user2"
# - project 123 has no mail in Sent Items or log of "user1" contains errors