web-dev-qa-db-ja.com

atdが過去のジョブを実行しないようにするにはどうすればよいですか?

Atデーモンは素晴らしいツールです!ただし、ジョブが午前8時にスケジュールされていて、その時間にマシンがオフになっている場合は、マシンが起動されるたびにatがジョブを実行します。私がやりたいのは、時間が過ぎたらジョブの実行を停止することです。マニュアルページとオンラインを検索しましたが、回答がないか、見つかりませんでした。私はArchを使用していますが、私が知る限り、ディストリビューション間で非常に似ています。

どんな助けでも大歓迎です!

9
Elmer

仕事はいつ過去の仕事になりますか? 7:59:50にシステムの電源を入れ、atデーモンが8:00:01で開始した場合、ジョブを実行する必要がありますか?デーモンが7:59:59に開始し、すべてのファイルを読み取るのに2秒かかる場合はどうなりますか?

あなたが決める!時間チェックでジョブを開始し、時間が経過した場合は中止します。

export execute_by_date=$(date +%s 'tomorrow 8:01')
at tomorrow 8:00
[ "$(date +%s)" -le "$execute_by_date" ] || exit
do_stuff
␄

シャットダウンまたは再起動時に、すべての保留されたat-jobをキャンセルするinit-scriptを作成できます。

Arch-Linuxについてはよくわかりません-/etc/sysconfig/atなどはありますか?おそらくそれはあなたがひっくり返す必要がある単なる設定スイッチです...

2
Nils

私の投票はcronデーモンに対するものです。

1日の特定の時間に実行する必要があるが、毎日同じ時間に実行する必要がない場合は、特定の実行時間で1日あたり1つのエントリを持つcrontabを作成します。

crontab(5)から抜粋したいくつかの例:

# run five minutes after midnight, every day
5 0 * * *       command
# run at 2:15pm on the first of every month
15 14 1 * *     command
# run at 10 pm on weekdays
0 22 * * 1-5    command
2
rpet

必要なのはcronデーモンです。それはまさにあなたが望むことをします。

cronデーモンのお気に入りの検索エンジンをフィードすると、たくさんのマニュアルと手順があります。 man cronおよびman crontabも役立ちます。

0
Marco