LoginSignup
13
2

はじめに 🐢

以下の投稿で定期的にプログラムを実行する必要があったのですが

しかし、レンタルサーバーにて次の制限がありました。

「cron は 3分以内の処理で、1時間間隔で、10個まで」

やりたいこと:3分毎に定期処理、どうしたのか、その顛末です。

実際には厳密に3分毎ではありません。2.5分間隔が混じります。

TL;DL

  • 6分毎に呼び出す cron を 10個 作った
  • 呼び出されるシェルで 必要な処理を2回実行
  • その 2回の間で sleep 150s を挟んだ

それだけ!

詳細

1. スケジュール

下表の単位はすべて分です。

処理1の開始時刻 スリープ 処理2の開始時刻
0 2.5 2.5
6 2.5 8.5
12 2.5 14.5
18 2.5 20.5
24 2.5 26.5
30 2.5 32.5
36 2.5 38.5
42 2.5 44.5
48 2.5 50.5
54 2.5 56.5

実際には処理1の所要時間が加算されるので
処理2の開始時刻はより遅れる事になります。

2. 呼び出されるシェル

呼び出されるシェルはこんな感じです。
実際は3分間隔では呼び出されていないのですが、
まあ、てげてげで良いでしょう!

every3min.sh
#!/bin/bash
(cd /hoge/insta2twislack && /usr/local/bin/php insta2twislack.php)
sleep 150s
(cd /hoge/insta2twislack && /usr/local/bin/php insta2twislack.php)

sleep 150s == 2.5分 ですが、php の処理が 15秒以内に終わることを
前提にしています。
0秒目開始 ⇒ 15秒目にて終了 ⇒ 15+150=165秒目開始 ⇒ 180秒目終了

私の使っているレンタルサーバーの制限では、
180秒 == 3分超えちゃうと、処理が打ち切られちゃうらしいです。

3. cron の記述

min hour day mon week sh
0 * * * * /hoge/every3min.sh > /dev/null 2>&1
6 * * * * /hoge/every3min.sh > /dev/null 2>&1
12 * * * * /hoge/every3min.sh > /dev/null 2>&1
18 * * * * /hoge/every3min.sh > /dev/null 2>&1
24 * * * * /hoge/every3min.sh > /dev/null 2>&1
30 * * * * /hoge/every3min.sh > /dev/null 2>&1
36 * * * * /hoge/every3min.sh > /dev/null 2>&1
42 * * * * /hoge/every3min.sh > /dev/null 2>&1
48 * * * * /hoge/every3min.sh > /dev/null 2>&1
54 * * * * /hoge/every3min.sh > /dev/null 2>&1

/hoge に insta2twislack ディレクトリと every3min.sh がある前提。

私の使っているレンタルサーバーだと、
/dev/null 2>&1 で結果やエラーメールを破棄できるらしいので、
それを付けてあります。
(標準出力、標準エラー出力を闇に葬っています)

4. チェーーーック

「cron は 3分以内の処理で、1時間間隔で、10個まで」

制限に引っかかってないか、確認します。

制約を回避して、およそ3分毎に定期処理を実行することができました。

おわりに

基本的に、本投稿は以下の投稿を補完するものだったのですが、

闇深く、信頼できる cron の入り口になるといいなと(今)思いました。

定期処理であれば、レンタルサーバーでなくても、
消費電力の小さな、自宅ラズパイでも良いかとは思います。
そんときは普通に */3 * * * * で OK牧場!

おわり!

13
2
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
13
2