3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

cronの起動時刻をランダムに書き替えるワンライナー

Last updated at Posted at 2020-08-02

小ネタである。

前提知識

bashでは、環境変数$RANDOMを用いることで、0~32767 の数字をランダムに得ることができる。

例えば、0~3 の数字をランダムに表示するには、剰余演算子記号%を組み合わせて次のようにする。

0~3の数字をランダムに表示
echo $((RANDOM % 4))

5~59 の数字ならこうだ。

5~59の数字をランダムに表示
echo $((5 + RANDOM % 55))

この辺の説明は【シェルスクリプトでランダムにアレをやる】 の方がずっと分かり易かったので、そちらを参照していただきたい。

cronの時刻フィールドを書き替えるには

本題。
最終行に次の cron が定義されているとする。

00 2 * * * /home/mindwood/foo.sh > /dev/null 2>&1

午前2時に起動する設定だが、これを、午前0時05分~午前3時59分の起動とし、幅を持たせたい。
その上で毎時ジャスト(午前1時、午前2時・・・)は避けたい。

書き替えるワンライナーはこうだ。

H=$((RANDOM%4));M=$((5+RANDOM%55));sed -i -e '$s/^[0-9]\+ [0-9]\+/'$M' '$H'/' /var/spool/cron/crontabs/root

例えば次のように更新される。

43 1 * * * /home/mindwood/foo.sh > /dev/null 2>&1

この時刻が気に入らなければ、何度でもやり直して良い。

なお、sed$は最後の行を表す。
sedについても、詳しくは 【sedでこういう時はどう書く?】 を参照して欲しい。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?