#WEBスクレーピングが出来るようになると、次は自動実行したくなるのでやってみた。
rocker/tidyverse での環境構築から。
rockerはみんな ubuntu がベースなので apt コマンドが使えます。
使うのは "cronR" Rパッケージ:
https://cran.r-project.org/web/packages/cronR/index.html
https://github.com/bnosac/cronR
現行メンテナのjwijffelsさんに感謝感謝
Rからなんでもやっちゃう
# 関連パッケージと読み込み
pacman::p_load(cronR, miniUI, shiny, shinyFiles)
# cronのインストールと起動
system("sudo apt-get install -y cron")
system("sudo service cron start")
cron_runcode.R
print(paste("EXECUTED :", Sys.time()))
warning(paste("WARNING! :", Sys.time()))
マニュアル通りにやってみる
# おや?解説通りに書くとエラーになる
f <- system.file(package = "cronR", "extdata", "/home/rstudio/cron_runcode.R")
cmd <- cron_rscript(f)
Error in cron_rscript(f) : file.exists(rscript) is not TRUE
# これで TRUE 返ってくるのに...
file.exists("/home/rstudio/cron_runcode.R")
stackoverflowは神
# こっちが正解
cmd <- cron_rscript("/home/rstudio/rvestproj/cron_runcode.R")
# これだけで追加完了
cron_add(cmd, frequency = 'minutely', id = 'job1', description = 'Book data crawler')
動いたぜやっほう!
[1] "EXECUTED 2019-05-11 17:00:01"
Warning message:
WARNING! 2019-05-11 17:00:01
[1] "EXECUTED 2019-05-11 17:01:02"
Warning message:
WARNING! 2019-05-11 17:01:02
[1] "EXECUTED 2019-05-11 17:02:01"
Warning message:
WARNING! 2019-05-11 17:02:01
管理コマンド
# これで設定中のジョブが見える(cronRから設定したものだけ)
cron_ls()
# これで全て消す
cron_clear(ask=FALSE)
その他の書式例:
cron_add(cmd, frequency = 'minutely', id = 'job1', description = 'Customers')
cron_add(cmd, frequency = 'hourly', id = 'job2', description = 'Weather')
cron_add(cmd, frequency = 'hourly', id = 'job3', days_of_week = c(1, 2))
cron_add(cmd, frequency = 'hourly', id = 'job4', at = '00:20', days_of_week = c(1, 2))
cron_add(cmd, frequency = 'daily', id = 'job5', at = '14:20')
cron_add(cmd, frequency = 'daily', id = 'job6', at = '14:20', days_of_week = c(0, 3, 5))
cron_add(cmd, frequency = 'daily', id = 'job7', at = '23:59', days_of_month = c(1, 30))
cron_add(cmd, frequency = 'monthly', id = 'job8', at = '10:30', days_of_month = 'first', days_of_week = '*')
cron_add(cmd, frequency = '@reboot', id = 'job9', description = 'Good morning')
cron_add(cmd, frequency = '*/15 * * * *', id = 'job10', description = 'Every 15 min')
crontab書き慣れてないと毎回大変なんですよね。
こりゃ楽です。
本格的にややこしいジョブは自分で crontab -e しないとですが、
僕は「1クローラ:1dockerコンテナ」で組んでいるので 全く困りません。
Rstudioの中から全部出来ると、Unix慣れてない人も安心して触れて素敵です。
次はgoogledriveパッケージで結果を更新します