anacronを使用して実行をスケジュールする方法は?

anacronを使用して実行をスケジュールする方法は?

私はしばしば次の形式でスクリプトから後で二次タスクをスケジュールします。

at now + 8 hours <<< "rm -f workfile.$$ >> $worklog 2>&1 "

または

at 11pm + $(date +%M) minutes <<< "./postMarketJob.sh $orderID &> $orderID.log"

問題は私がサーバーとして使うノートパソコンやパソコンが予定された時間になると終了する場合があり、働いている決して起こらないでしょう。

同じ質問が次にも適用されます。予約されたこと記入。

理解しようとするanacron のマニュアルページUbuntuの場合。

リクエストやサーバーがオンラインに戻った直後にジョブを実行するようにスケジュールできるツールはありますか?

と一緒にいる必要はありませんanacron。ただ何かなら利用可能な場合は、次に通話を終了します。sudo

言う

これらのアクションは固定スクリプト(存在する場合)ではありませんが、非常に可変的で条件付きです。つまり、プログラムの予期しない状況に応じて最初から予約することも、予約してはいけません。

私のプログラムに同様のインターフェースを提供するために、atd/anacronの上に独自のラッパーを開発する必要があるかもしれませんが、at何かがすでに存在することを願っています。fcron互換性があり、一部のリポジトリでUbuntuで使用できることを確認しました。

答え1

一度実行されるジョブの場合、at要件は完全に満たされます。atdスケジュールされた日付以降もいつでもスケジュールされたすべてのタスクを実行します。特に、起動時atdにダウンタイム中に日付が期限切れになるすべてのジョブの実行をトリガーします。

定期的なタスクでは、固定スケジュールcrontabエントリと@rebootcrontabエントリを組み合わせることができます。項目では、@reboot過去24時間(または希望の時間間隔)で完了していない操作のみを実行してください。

42 5 * * * /usr/local/bin/myjob && touch /var/myjob/done
@reboot if [ -z "$(find /var/myjob.done -mtime 1)" ]; then /usr/local/bin/myjob && touch /var/myjob/done; fi

答え2

Anacronは素晴らしいです...毎回タスクが実行されることを保証するシステムです。窒素数量、再起動後 - 制御はあまりありません。また、これは常駐デーモンではないため、crondまたはatdを置き換えることはできません。起動時に(または手動で呼び出すとき)起動し、いくつかの条件を確認する前に適切な間隔を待ってから、すべてが確認または実行されると終了します。

言い換えれば、あなたの場合に役立つ可能性があります。次のことができます。
echo '@monthly 0 custom1timejob script_or_cmd_here' >> /etc/anacrontab

次に、atジョブをスケジュールし、アナクロンがジョブが実行されたことを知るためにスクリプトに何かを含めます(実行を通してdate +%Y%m%d > /var/spool/anacron/custom1timejob)。はるかに簡単です:anacrontab()からエントリを削除するだけですsed -i /custom1timejob/d /etc/anacrontab

次に、最悪のシナリオでは、次回のシステム起動時にジョブを実行する必要があります。
RANDOM_DELAY(/ etc / anacrontab [参照]のおよび変数が期待に反していないことを確認してください。)START_HOURS_RANGEman anacrontab

答え3

この場合、batchオプションがat役に立ちます。

私のサンドボックスRHEL5システムでは、次の2分間のバッチジョブをスケジュールしてからatを停止できます。 5分ほど待ってから再起動しました。アトが開始されると、バッチジョブは直ちに開始されます。

通貨:batch "NOW+2 minutes"または許可されたat時間を入力してください。

Fedora 16でこれを試すのに問題がありました。マニュアルページは時間の入力をサポートしていることを示していますが、このコマンドは引数を受け入れないことを報告します。

関連情報