次のような行を使用して、cron で 5 分ごとに何かを実行できることを知っています。
*/5 * * * * /my/script
12:00、12:05、12:10 ではなく、12:01、12:06、12:11 などに実行したい場合はどうすればよいですか? 私はこれを行うことができると思います:
1,6,11,16,21,26,31,36,41,46,51,56 * * * * /my/script
……だけど、それは醜い。それを行うよりエレガントな方法はありますか?
1-56/5 * * * * /my/script
これは vixiecron で動作するはずですが、他の実装についてはわかりません。
最初のスケジュールを使用します。
*/5 * * * * /my/script
これをスクリプトの先頭に追加します。
sleep 60
(はい、これは冗談です)
最初のパラメーターとしてスリープ期間を取り、スクリプトを残りとして実行する新しいスクリプト「delaystart」を作成します。スクリプトが crontab 行でスクリプトのある行をチェックするようにし、行がコメントアウトされていない場合にのみスクリプトを開始します。これにより再利用が可能になり、実際にはスクリプトが実行されていない場合でも、 ps はスクリプトが実行中であると報告しません。
#!/bin/bash
sleeptime=$1
sleep ${sleeptime}
shift
if ( ! crontab -l | grep -e '#.+delaystart '${sleeptime} $* ) then
$*
fi
sean.brightのジョークは私に考えさせました...なぜ使用しないのですか...
* * * * * /my/script
...そしてスクリプト内でこれを行います...
#!/bin/bash
export WHEN=`date '+%M'`
echo $WHEN
export DOIT=`echo "$WHEN % 5" | bc`
echo $DOIT
if [ $DOIT != 0 ] ; then
echo "ha ha ha"
fi
echo "done"
...応急修理...多分、しかしcrontabと同じくらい醜い...わかりません。