組み込みプロジェクトにUbuntu 12.04を使用しています。指定された時間にのみ実行するcronジョブが必要です。時間を進めることができるため(ジョブが実行されない)、これらのジョブはスキップする必要があるためです。これをテストしているときに、crontabを/etc/cron.dに配置し、たとえばジョブを13:15にスケジュールし、システム時間を13:25に設定した場合でも、ジョブは〜13:26に実行されます。見逃したジョブは実行したくないので、無視する必要があります(私が行った調査によると、これは「通常の」cronの動作です)。 anacronを削除して、古いcronを保持する方法について何か提案はありますか?
ありがとう。
Anacronを削除することが問題になる理由はわかりません。 papukaijaが述べた回答にも警告は含まれていません。特に、欠落しているジョブは、時間が経過したときにまさに望んでいるものだからです。
パッケージの説明は言う:
システムの電源が24時間オンになっていない場合は、このプログラムをインストールして、他のDebianパッケージのメンテナンスジョブが毎日実行されるようにする必要があります。
したがって、単にSudo apt-get remove anacron
で削除します(purge
は使用しないでください。構成ファイルが保持されます)。
(お気づきのように)1つの問題が残っています-cronは、Daylight Saving Timeなどの結果として3時間未満のタイムステップを認識し、未処理のジョブを実行します。
時計の変更が3時間未満の場合、たとえば夏時間の開始時と終了時など、特別な考慮事項があります。時間が進んでいる場合、スキップされた時間に実行されていたはずのジョブは、変更後すぐに実行されます。逆に、時間が3時間未満前に戻った場合、繰り返された時間に該当するジョブは再実行されません。
3時間を超える時計の変更は時計の修正と見なされ、新しい時刻がすぐに使用されます
考えられる回避策は、正確な実行時間のジョブのみが影響を受けるという事実にあります。
特定の時間に実行されるジョブ(@hourlyとして指定されていないか、時間または分の指定子に「*」が指定されていない)のみが影響を受けます。ワイルドカードで指定されたジョブは、すぐに新しい時間に基づいて実行されます。
したがって、3時間ごとにジョブを実行する場合は、次のような行を作成します。
25 */3 * * * root /path/so/some/file
完全に異なるアプローチ(これらのジョブを1回だけ実行する場合)は、at
を使用することです。
Anacronをアンインストールすると、デスクトップもアンインストールされます。つまり、Ubuntuはanacronのないシステムをサーバーと見なします。それが問題である場合は、anacronバイナリから実行権限を削除してみてください。
Sudo chmod a-x /usr/sbin/anacron
Sudo chmod a-x /etc/init.d/anacron
これは、/ etc/crontabが/ usr/sbin/anacronが実行可能かどうかを確認することによってanacronの存在をチェックし、実行可能でない場合は、毎日、毎週、および毎月のジョブが同期して実行されるためです。