Linux

在linux中,是否可以每天比前一天晚3分鐘執行腳本?

  • June 4, 2012

我對此的第一個解決方案是執行date +%Y%m%d%H%M該格式的數字並將其放入文件中,然後每分鐘從 cron 執行腳本。然後,如果文件中的日期與 date 命令匹配,則腳本將執行某些操作。然後它將在第二天加上 3 分鐘更新該文件。有沒有更好的方法來實現這一點?

結果將是腳本將在第一天(例如)凌晨 4:00 執行,然後第二天在凌晨 4:03 執行,第三天在凌晨 4:06 執行。它會每分鐘執行一次,但只在正確的時間執行(如果阻塞)。

問題和我的解決方案是否清楚?

您可以at在腳本(或包裝器)中使用該命令。給它時間執行下一次迭代。

echo '/dir/scriptname' | at 'now + 1443 minutes'

將該行盡可能靠近腳本的開頭以減少漂移。

您應該使用at而不是cron,它將允許您只執行一次任務。然後它可以重新安排自己的時間。


好吧,我想建議對您自己的解決方案進行一些改進——如果您堅持下去的話。但是,它仍然需要通過以下方式每分鐘執行一次腳本cron

當腳本上次執行時,您無需操作任何設置或跟踪,您可以使用 UNIX 時間戳達到相同的目標:

一天有60*60*24 = 86400幾秒鐘。如果您3*60 = 480從您的要求中添加,您有86880幾秒鐘的時間 - 這正是您希望腳本執行的時間間隔。在腳本中,您現在可以檢查目前 UNIX 時間 %(模)該秒數是否等於 0,否則中止。

如果您需要明確的首次執行,例如 2012 年 6 月 5 日凌晨 4:00,您可以1338861600先從本地時間中減去關聯的時間戳 ( ),檢查它是否不小於零,然後繼續計算差值。 ..


當然,你也可以讓腳本修改它自己的crontab條目,但這很冒險,也有點尷尬。

引用自:https://unix.stackexchange.com/questions/39969