LoginSignup
3
3

More than 5 years have passed since last update.

Bashで作ったランダムな時刻でcronにタスクを登録する

Last updated at Posted at 2012-12-26

この記事は最終更新から1年以上経過しています。 気をつけてね。

複数のサーバでDailyなタスクを登録する際、時刻をランダムにしておきたいことがあるので適当に生成する。

bash
$ MIN=`bash -c 'echo $(($$ % 60))'`
$ HOUR=`bash -c 'echo $(($$ % 24))'`
$ TASK="$MIN $HOUR * * * /bin/true"
$ sudo echo "$TASK"
39 16 * * * /bin/true

新規Bashに振られるプロセスIDを元にMIN,HOURの行は毎回違う値になる。

bash的ノウハウを使っているのはこの辺。

  • プロセスID $$が毎回違う値になるように別シェルを起動する
    • シングルクォートの遅延展開にしないと$$は親のPIDになる
  • 二重括弧$(())で演算、商の余りで無効な時刻生成を回避
  • TASKのところはダブルクォートで$MIN.$HOURを展開しないと最後のEchoでそのまま出現する
    • クォート無しでは$HOURがコマンドとして解釈されて代入できない
  • $TASKはクォートなしだと"*"がカレントディレクトリのファイル一覧に展開されて大変危険

sudoはroot以外からcronの設定ファイルに直接突っ込むためにつけてみた。rootなら不要だがcron関連のパーッミッションには注意。

3
3
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
3
3