atdが過去のジョブを実行しないようにする方法は?


9

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

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

回答:


7

ジョブはいつ過去のジョブになりますか?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
␄

2

シャットダウンまたは再起動時に、保留されたatジョブをすべてキャンセルするinitスクリプトを記述できます。

Arch-Linuxについてはよくわかりません- /etc/sysconfig/at似たようなものはありますか?多分それはあなたが裏返す必要がある設定スイッチだけです...


これが最良の解決策だと思います。at起動前にブート時にキューをフラッシュしますat
バハマ

これはまさに私が期待する/可能なはずです!残念ながら/etc/sysconfig/Arch にはディレクトリがまったくありません...そしてmanページにリストされているファイルはどれも設定ファイルではありません。
Elmer

@Elmer私はちょっとググって、arch linuxについて読んだ。'/etc/rc.d/atd'は、そこにあるat-daemonのinit-scriptのようです。いくつかの設定ファイルを解析しているのを見ることができるなら、そこを見てください。運が悪い場合は、独自のinitスクリプトを作成する必要があります(名前を付けてatclear実行する前などatd)。
Nils

2

私の投票は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

0

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

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


助けてくれてありがとう、しかし私の問題ではcronが機能しません。1日の特定の時間にスクリプトを実行する必要がありますが、毎日同時に実行する必要はありません。
Elmer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.