crontabでスクリプトを定期実行する




cronで定期実行

サーバー上で何かの処理を定期実行したくなる場面はよくあるかと思います。そんな時に候補に上がるものとしてcronとJenkinsがあると思います。

cron

メリット

  • 少ない設定で手軽に設定でき、すぐ動作する
  • EC2だと初期設定でcronが使える

デメリット

  • コードで管理するのでジョブが多くなってくると見通しが悪くなって管理できなくなる
  • 正常に動作しているのか、していないのか初めて使う場合よくわからないので動いていない場合原因究明が少し大変

jenkins

メリット

  • GUIのサービスなのでジョブが多くても問題なく管理できる
  • 細かな設定もGUIでできる

デメリット

  • サーバーにJenkinsをインストールしないといけないので導入と初期設定が少しめんどくさい
  • アクセス制限等のセキュリティに気をつけないといけない。←当たり前ですが

cronでの定期実行

下記コマンドでcronの設定ファイルを開けます。

crontab -e

今回はnodeスクリプトの定期実行を想定しています。

cronでの実行で気をつけないといけないのは、crontabを実行したユーザーのホームディレクトリがスクリプト実行の起点になるということです。そのため、スクリプトを置いているディレクトリに移動するなど少し工夫が必要です。

下記は/home/ec2user/scripts/sample.jsを5分おきに実行する設定です。したがって、まず/home/ec2user/scriptsに移動してnodeコマンドをフルパスで指定してsample.jsを起動するようにしています。

*/5 * * * * cd scripts; ~/.nvm/versions/node/v6.10.2/bin/node /home/ec2-user/scripts/sample.js

動作しているかの確認方法

設定したcronが実際に動作しているかは下記ログファイルの中を見ればわかります。時間とコマンドが表示されていれば大丈夫です。

sudo cat /var/log/cron
Aug 22 07:02:01 ip-xx-xx-xx-xx CROND[18991]: (ec2-user) CMD (cd app/crawler; ~/.nvm/versions/node/v6.10.2/bin/node /home/ec2-user/scripts/sample.js)

エラーが出ていないか確認する方法

しかし、cronが動作していてもスクリプトがエラーになっている場合があります。その時はエラーをファイルを書き出して確認します。

*/5 * * * * cd scripts; ~/.nvm/versions/node/v6.10.2/bin/node /home/ec2-user/scripts/sample.js>>/tmp/sample.log 2>>/tmp/sample-err.log

まとめ

  • crontabを実行したユーザーのホームディレクトリが起点となる
  • /var/log/cronを見ると実行できているか分かる
  • スクリプトがエラーになっていないかログを書き出して確認する

以上3点を頭にいれておけばcronでつまづくことはないかと思います。以上です。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です