LoginSignup
94
99

More than 5 years have passed since last update.

定期実行の手法3パターンとその活用例

Posted at

1. 定期実行の手法3パターン

  • cronによる定期実行(crontabもしくはcron.dの活用)
  • Jenkinsによる定期実行
  • プログラムによる定期実行(while文とsleepメソッドの活用)

1-1. cronによる定期実行

crontabの使い方

  • crontab -e:edit。crontabファイルの編集。
  • crontab -l:list。crontabファイルの内容表示。
  • crontab -r:remove。crontabファイルの削除。

crontabファイルの書き方は下記の通り。

分 時 日 月 曜日 コマンド
設定可能な数値
0-59
0-23
1-31
1-12 or jan-dec
曜日 0-7 (0,7は日曜) or sun-sat
設定例 説明
リスト 0,15,30,45 カンマ区切りで複数条件指定
範囲 1-5 1,2,3,4,5と同義
共存 1,3,5-7 1,3,5,6,7と同義
間隔値 1-7/3 1,4,7と同義

crontab -eは推奨しません。個人的にはcron.dの使用をオススメします。

(参考URL)
▼crontab -e は「絶対に」使ってはいけない
http://d.hatena.ne.jp/ozuma/20120711/1342014448

cron.dの使い方

記述方法はcrontabと同様。

sudo vim /etc/cron.d/hogehoge
  • hogehogeファイルに実行したいコマンドを書けばOK!

cronの活用例

10分おきにroot権限でtest.phpを実行し、標準出力と標準エラー出力をログファイルに書き足す。

$ sudo vim /etc/cron.d/hogehoge

*/10 * * * * root php /path/to/test.php >> /var/log/hogehoge/fuga.log 2>&1
  • */10 * * * *:10分おき
  • root:root権限で実行
  • php /path/to/test.php:test.phpファイル実行
  • >>:出力をファイルの末尾に追加
  • /var/log/hogehoge/fuga.log:はき出し先のログファイル
  • 2>&1:標準出力と標準エラー出力を同じファイルに出力
  • おまけ:tail -f /var/log/hogehoge/fuga.logにより、ログの更新をリアルタイムにチェック出来る

2. Jenkinsによる定期実行

Jenkinsの使い方

  • ジョブを選択し「設定」をクリックすると、Jenkinsのジョブ設定が出来る
  • 「定期的に実行」にチェックを入れると、スケジュールの設定が可能となる
  • スケジュールの書き方はcronと同じ
  • 「シェルの実行」の欄に実行したいシェルスクリプトを書けばOK!

Jenkinsの活用例

毎日24:30(日本時間)にphpファイルを実行させ、結果をメールで送る。

30 15 * * *
  • 分 時 日 月 曜日:GMTの15時30分に毎日実行
  • 日本時間はグリニッチ標準時間(GMT)より9時間進んでいる
REPORT_DIR="$WORKSPACE"/target
mkdir -p "$REPORT_DIR"
/usr/bin/php /path/to/test.php > "$REPORT_DIR"/report.csv
DATE=`date +%Y/%m/%d`
cat "$REPORT_DIR"/report.csv | /bin/mail -s "${DATE} デイリーレポート" -r aa@hoge.co.jp -c bb@hoge.co.jp -c cc@hoge.co.jp dd@hoge.co.jp ee@hoge.co.jp
  • $WORKSPACEbuild.xml<workspace>に記述された環境変数
    • (例)/var/lib/jenkins/workspace/ジョブ名
  • $REPORT_DIR:僕が勝手に作った変数
  • /usr/bin/php /path/to/test.php > "$REPORT_DIR"/report.csv:phpスクリプトの実行結果をCSVファイルに書き出す
  • date +%Y/%m/%d:現在の日付を取得
  • メールコマンドについてはこちら参照

  • おまけ

    • $JENKINS_HOME/var/lib/jenkins
    • build.xmlのパス:$JENKINS_HOME/jobs/ジョブ名/builds/ビルド番号/build.xml

3. プログラムによる定期実行

php

while (1) {
    // 処理
    sleep(5 * 60); // 5分おき
}

Java

while (true) {
    // 処理
    try{
        Thread.sleep(5 * 60 * 1000); // 5分おき
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
94
99
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
94
99