Macのローカルでcronを使いたい

f:id:utr066:20180206002330j:plain

ちょっと記事の投稿を自動化したかったので、cronを使いたい。 cronって言葉は聞いたりするけど、いじったことはなかったので簡単な使い方ぐらいは知りたい。

Macのローカルでcronを使う

サーバー借りてその中でプログラム入れて、cronの設定してってイメージあったんだけど、ローカルでもできるっぽい?

cronの設定ファイルを編集する

$ crontab -e

-eをつけることで、crontabファイルの編集をすることができる。 もちろんコマンドは他にもある。

-e   crontabファイルの編集。
-r  crontabファイルの削除。
-l  crontabファイルの閲覧。

実行したい日時を登録する。

crontabファイルに特定のファイルやコマンドをいつ実行したいのかを記述する。

分 時 日 月 曜日 コマンド

こんな形式で書くらしい。

ローカルでcronを使ってコマンドの実行をする

$ crontab -e

cronの設定ファイルを開いたら、以下のように記述する。

*/1 * * * * ls -l

これで、1分毎にls -lを実行してくれるはず。

実行された結果は、/var/mail/ユーザー名に出るので、catでも使って確認することができる。

なるほど。コマンドの実行は確認できた。ファイルも実行してみよう。

ローカルでcronを使ってrubyファイルの実行をする

コマンドの実行はできたので、同じ要領でファイルの実行もできるはず。

Users/ユーザー名/desktop/print.rb

puts 'hello'

適当に文字を出力するファイルを作り、

crontab -e

で以下のように記述してみる。

*/1 * * * * ruby /Users/ユーザー名/desktop/print.rb

これで1分毎に'hello'が出力されそうだけど、どうだろう。

$ cat /var/mail/ユーザー名
Date: Tue,  6 Feb 2018 00:07:00 +0900 (JST)

hello

出力されていますね。

とりあえず、cronを使ってファイルを実行できることが確認できてよかった。 そもそも、なぜやってみたかというと情報を集めて記事を投稿するスクリプトを定期的に実行したかった。

ファイル指定すれば、決まった時間に投稿してくれそうなのでかなーり楽で良いですね。自動化素晴らしい。

rbenvで管理していると、requireがloadできないよみたいなエラーが出る。 /bin/bash -clってcrontabの記述で書けば、読み込めた。

*/1 * * * * /bin/bash -cl 'cd /Users/ユーザー名/projects && ruby -Ku 〇〇.rb'