cronでrbenvのRubyスクリプトを定期実行してみる
cronの設定
cronについてはこちらの記事を参考にさせていただきました。
/etc/crontabと/etc/cron.d設定ファイルの書き方 | server-memo.net
crondが動作しているか確認
$ systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since 金 2016-10-14 05:28:49 JST; 1h 20min ago Main PID: 17173 (crond) CGroup: /system.slice/crond.service └─17173 /usr/sbin/crond -n 10月 14 05:28:49 CentOS systemd[1]: Started Command Scheduler. 10月 14 05:28:49 CentOS systemd[1]: Starting Command Scheduler... 10月 14 05:28:49 CentOS crond[17173]: (CRON) INFO (RANDOM_DELAY will be sc....) 10月 14 05:28:51 CentOS crond[17173]: (CRON) INFO (running with inotify su...t) 10月 14 05:28:51 CentOS crond[17173]: (CRON) INFO (@reboot jobs will be ru....) Hint: Some lines were ellipsized, use -l to show in full.
Active: active (running)になっていれば大丈夫。
死んでたら起動しましょう。
$ sudo systemctl start crond
スケジューリングの登録
rbenvのrubyを実行するのに、こちらの記事を参考にさせていただきました。
cronでrbenvのrubyを使う3つの方法 - sonots:blog
$HOME/news_mailディレクトリを作成し、ニュース配信のスクリプトを配置。毎日7時、12時、19時の3回実行するように設定しています。
$ crontab -e 0 7,12,19 * * * /bin/bash -lc 'cd $HOME/news_mail && ruby main.rb'
オプションの意味は
- -lオプションで.bash_profileを読み込む。
- -cオプションでコマンドをstringから読み込む。
詳しくはmanで確認できます。
$ man bash
スケジューリングの確認
$ crontab -l 0 7,12,19 * * * /bin/bash -lc 'cd $HOME/news_mail && ruby main.rb'
設定した値が表示されればOK。
ノートを閉じるとサスペンド状態になっちゃうので無効にする
CentOSはノートにインストールしてあるので閉じるとサスペンドされちゃってcronが動きませんでした。よって無効にしておきます。
こちらの記事に従って、logind.confを書き換えます。
CentOS7でノートPCを閉じてもサスペンドさせない - Qiita
HandleSuspendKey、HandleHibernateKey、HandleLidSwitchをコメントアウトしてignoreに。
$ sudo vim /etc/systemd/logind.conf # == 省略 == #HandleSuspendKey=suspend HandleSuspendKey=ignore #HandleHibernateKey=hibernate HandleHibernateKey=ignore #HandleLidSwitch=suspend HandleLidSwitch=ignore # == 省略 ==
サービスの再起動。
$ sudo systemctl restart systemd-logind.service
あとは時間になるのを待つだけZzz..
一週間ほど運用してみましたが、今のところ安定稼動中です♪