15秒ごとにCron実行ジョブ


18

15秒ごとcrontabに(テストのために使用する/usr/bin/chromium-browser)何らかのジョブを実行するために、何を書き込むべきかをアドバイスしてもらえますか?


crontabの代わりに、他のイベント管理システムに依存してください。たとえば、Perlのevery.pmモジュールがこれを支援します。
ニキルマーリー

回答:


27

cronを使用して1分未満の粒度にすることはできません。できることは、毎分、ジョブを実行し、15秒待機して繰り返すスクリプトを実行することです。次のcrontab行はsome_job15秒ごとに開始されます。

* * * * * 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秒ごとにタスクを実行することはできませんか?


可能性もあります:for i in 1 2 3 4 ; do some_job & sleep 15; done(最後のスリープは次の実行には影響しません)、しかし、あなたが行う方法は、発信cronjobメールのタイミング(おそらく最後のsome_jobの直後に送信され、15秒後のintead私の亜種)
オリビエデュラック


13

他とは異なるアプローチ:それぞれ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がトリガーされることに注意してください。


繰り返しですが、華麗です。
マイクKormendy

1
いいね プロセスの実行時間が長くなると、おそらく次のプロセスも別のコアで終了する可能性があります。Cronジョブのコアアフィニティを意図的に設定できるかどうかはわかりませんが、それによりこのアプローチがさらに改善される可能性があります。
ティム

@ティム良い点。私はそれを編集でいくらか取り上げました。
オテウス

2

要するに、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-browsercrontabに行があります。マニュアルによると、毎分実行されるはずですが、何も実行されていません。
xralf

そのようなスクリプトを書くのは難しいですか?別の質問をする必要がありますか、それともここに書くことができますか?
xralf

Cronジョブには端末がないため、ブラウザでエラーが発生することが予想されます。静かにそうするかもしれません。
BillThor

私のcronログは、redhatの派生物の/ var / log / cronにあります。fedora、centosなど。また、何をしようとしているのかを正確に説明して、人々が何が起こっているのかを完全に把握できるようにするのにも役立ちます。
rfelsburg

1

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分後に書いたとき、クロムブラウザが実行されているのが見えません。
xralf

@xralf-スクリプトは最大で数秒間しか実行されません。をgreppingしてみてくださいsleep
amphetamachine
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.