シェルである時刻の間なら次のコマンドを実行するというのはどう書くのが簡単なのでしょうか?

5分ごとにCRON を動かして、いろいろ実験をしたいのです。5分ごとのときもあれば、1時間ごとにしたい場合もあります。
シェル(bash)の if 分と、date をつかってなんとかできそうな気がするのですが、どうするのがいいのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/07/22 17:18:16
  • 終了:2010/07/29 17:20:02

回答(2件)

id:pyopyopyo No.1

pyopyopyo回答回数345ベストアンサー獲得回数842010/07/23 04:14:38

ポイント35pt

たとえば、

7月23日の8時55分から7月23日の9:00の間であればコマンドを実行、ということを bash でゴリおしするなら

start=`date --date "Jul 23 08:55" +%s`
end=`date --date "Jul 23 09:00" +%s`
now=`date +%s`
if [ $start -gt $now -a $now -gt $end ]; then
  実行したいコマンド
fi

という感じです。

同様に、毎日 10:00 から 11:00 の間であれば実行、ということなら

now=`date +%k`
if [ 10 -gt $now -a $now -gt $11 ]; then
  実行したいコマンド
fi

と言う感じです。ちょっと面倒ですね。


別解として cron で工夫する方法、atコマンドを使う方法は、検討されましたか?

cronで工夫する案

cronでも

*/5     *       *       *       *       ユーザ名   コマンド

とやれば5分毎にコマンドを起動できますし

1,3,5,7,11     *       *       *       *       ユーザ名   コマンド

とやれば毎時1,3,5,7,11分にコマンドを起動できます。

atコマンドを使う案

at コマンドを使うと、たとえば

at -f hogehoge.sh 13:00

とやれば 13:00 に hogehoge.sh を実行できます。

crontab と異なり、atで登録したjobは1回だけしか実行されませんので、あとは

at -f hogehoge.sh 13:01
at -f hogehoge.sh 13:03
at -f hogehoge.sh 13:05
at -f hogehoge.sh 13:07
at -f hogehoge.sh 13:11

などと、おもむろにjobを登録するだけは解決できませんか?

http://www.linux.or.jp/JM/html/at/man1/at.1.html

id:kaiketsu

cron の設定はなるべく変更したくないので、やや面倒な方法を検討しています。

2010/07/23 11:58:32
id:ko8820 No.2

ko8820回答回数1221ベストアンサー獲得回数692010/07/26 16:14:42

ポイント35pt

if [ $DATE_1 -eq $DATE_2 ]; then

echo "指定された2つの日付は同一日時です。"

http://www.geocities.jp/geo_sunisland/date.html

bashクックブック
Carl Albing JP Vossen Cameron Newham 株式会社クイープ
4873113768

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません