crontab
15秒ごとにいくつかのタスクを実行するように書く方法を提案してもらえますか/usr/bin/chromium-browser
(テストに使用します)?
答え1
クローンの粒度は1分未満ではありません。あなたができることは、1分ごとにタスクを実行するスクリプトを実行し、15秒待ってから繰り返すことです。次のcrontab行はsome_job
15秒ごとに始まります。
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
スクリプトは、操作が15秒以上かかることを前提としています。次の少し複雑なスクリプトでは、時間がかかりすぎる場合は、次のインスタンスを実行できなくなります。date
サポートされている形式(たとえば、GNUやBusyboxに依存する%s
ため、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がおそらく間違ったアプローチである可能性があることを指摘したいと思います。 uniceは寿命の短いプロセスに適していますが、15秒ごとにプログラムを起動するオーバーヘッドは無視できません(プログラムの要件によって異なります)。アプリケーションを実行し続け、15秒ごとにタスクを実行することはできませんか?
答え2
他の方法とは異なり、それぞれ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を介して実行時間を15秒に制限してください。コアツール'timeout
すべての職業について。ただし、15秒が経過するとすぐにジョブが正常に終了しない場合は、問題が発生する可能性があります。この問題を解決する方法の詳細については、コマンドのドキュメントを参照してください。また、コマンドが15秒以上かかり、タイムアウトのためにコマンドが終了すると、ゼロ以外の終了ステータスが表示され、cronjob-emailがトリガーされます。
答え3
簡単に言えば、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秒ごとに実行されるスクリプトを書くことはできます。
答え4
クローンタブから:
* * * * /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