15秒ごとcrontab
に(テストのために使用する/usr/bin/chromium-browser
)何らかのジョブを実行するために、何を書き込むべきかをアドバイスしてもらえますか?
15秒ごとcrontab
に(テストのために使用する/usr/bin/chromium-browser
)何らかのジョブを実行するために、何を書き込むべきかをアドバイスしてもらえますか?
回答:
cronを使用して1分未満の粒度にすることはできません。できることは、毎分、ジョブを実行し、15秒待機して繰り返すスクリプトを実行することです。次のcrontab行はsome_job
15秒ごとに開始されます。
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
このスクリプトは、ジョブに15秒以上かかることはないと想定しています。次のやや複雑なスクリプトは、実行に時間がかかりすぎた場合に次のインスタンスを実行しないようにします。フォーマットのdate
サポートに依存し%s
ます(GNUやBusyboxなど、Linuxでも大丈夫です)。crontabに直接配置する場合、%
文字は\%
crontab行のように記述する必要があることに注意してください。
end=$(($(date +%s) + 45))
while true; do
some_job &
[ $(date +%s) -ge $end ] && break
sleep 15
wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job
ただし、15秒ごとにジョブを実行する必要がある場合は、おそらくcronが間違ったアプローチであることに注意してください。ユニセは短命のプロセスには適していますが、15秒ごとにプログラムを起動するオーバーヘッドは無視できない場合があります(プログラムの要求度によって異なります)。アプリケーションを常に実行して、15秒ごとにタスクを実行することはできませんか?
1 2 3 4 ; do some_job & sleep 15; done
(最後のスリープは次の実行には影響しません)、しかし、あなたが行う方法は、発信cronjobメールのタイミング(おそらく最後のsome_jobの直後に送信され、15秒後のintead私の亜種)
他とは異なるアプローチ:それぞれ15秒ずつずらして4つのcronjobを実行します。
* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job
ジョブがそれ自体に干渉するのを防ぐために、ジョブごとにGNU coreutils ' timeout
を使用して実行時間を15秒に制限します。ただし、15秒の終わりにジョブがすぐに適切に終了しない場合は、問題が発生する可能性があることに注意してください。問題になった場合の解決方法の詳細については、コマンドマニュアルを参照してください。また、コマンドの実行に15秒以上かかり、タイムアウトで強制終了されると、ゼロ以外の終了ステータスになり、cronjob-emailがトリガーされることに注意してください。
要するに、cronは時間とともにそれほどきめ細かではありません。最短の期間は1分です。
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
* * * * /usr/bin/chromium-browser
ただし、15秒ごとに実行されるスクリプトを作成できます...
* * * * * /usr/bin/chromium-browser
crontabに行があります。マニュアルによると、毎分実行されるはずですが、何も実行されていません。
crontabで:
* * * * /usr/bin/chromium-browser_starter
次に/usr/bin/chromium-browser_starter
:
#!/bin/sh
# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).
for ((secs=0; secs<46; secs+=15)); do
(sleep $secs; /usr/bin/chromium-browser "$@") &
done
wait
ps aux | grep chrom
分後に書いたとき、クロムブラウザが実行されているのが見えません。
sleep
。