LoginSignup
2
0

More than 3 years have passed since last update.

Rでcron設定をめちゃ簡単にやって自動スクレーピングする

Last updated at Posted at 2019-05-11

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パッケージで結果を更新します

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0