1. ホーム
  2. bash

[解決済み] Cronジョブおよびランダム時間(指定時間内

2022-09-09 18:01:12

質問

PHPスクリプトを1日に20回、完全にランダムな時間に実行する機能が必要です。また、午前 9 時から午後 11 時の間にのみ実行されるようにしたいです。

私は、Linuxでcronジョブを作成することに精通しています。

どのように解決するのですか?

もし私があなたが探しているものを理解しているなら、少し面倒なことをする必要があります。例えば、実行時間をランダムにするbashスクリプトを実行するcronジョブが必要です。 このようなものです。

crontabを使用します。

0 9 * * * /path/to/bashscript

で、/path/to/bashscriptにあります。

#!/bin/bash

maxdelay=$((14*60))  # 14 hours from 9am to 11pm, converted to minutes
for ((i=1; i<=20; i++)); do
    delay=$(($RANDOM%maxdelay)) # pick an independent random delay for each of the 20 runs
    (sleep $((delay*60)); /path/to/phpscript.php) & # background a subshell to wait, then run the php script
done

いくつかの注意点: この方法は、午前9時に20のバックグラウンドプロセスを起動し、それぞれがランダムな分数(最大14時間、すなわち午後11時まで)待機し、その後PHPスクリプトを起動して終了するので、リソースを少し浪費しています。 また、ランダムな分数 (秒数ではない) を使用するため、開始時刻はそれほどランダムではありません。 しかし、$RANDOMは32,767までしかなく、9時から23時までの間に50,400秒あるので、秒数もランダムにするとなると、もう少し複雑になります。 最後に、開始時刻はランダムで互いに独立しているため、スクリプトの 2 つ以上のインスタンスが同時に開始される可能性があります (ただし、可能性はあまり高くありません)。