Вместо того, чтобы запускать задание cron каждый день, запускайте его каждые 5 минут (или с некоторым разумным интервалом) и следите за тем, когда он обрабатывал файл. Например,
needswork <- function(filename, expr, updated = paste0(filename, ".seen")) {
if (!file.exists(filename)) return(FALSE)
if (!file.exists(updated)) return(TRUE)
return(file.info(updated)$mtime < file.info(filename)$mtime)
}
donework <- function(filename, expr, updated = paste0(filename, ".seen")) {
writeLines(character(0), updated)
}
if (needswork("/path/to/mainfile.csv")) {
# process the file here
# ...
# update
donework("/path/to/mainfile.csv")
}
Я мог бы немного расширить needswork
, чтобы добавить проблемы с уведомлениями, такие как
needswork <- function(filename, expr, updated = paste0(filename, ".seen")) {
if (!file.exists(filename)) return(FALSE)
if (difftime(Sys.time(), file.info(filename)$mtime, units="secs") > 60*60*24) {
some_notify_function()
# perhaps something like
msg <- paste("The file", sQuote(filename), "has not been updated since",
file.info(filename$mtime))
RPushbullet::pbPost("note", title = "No recent updates", body = msg)
}
if (!file.exists(updated)) return(TRUE)
return(file.info(updated)$mtime < file.info(filename)$mtime)
}