簡體   English   中英

防止計划的 cron 作業在失敗時重復

[英]Keep a scheduled cron job from repeating on failure

我有一個每分鍾運行一次的 cron 作業,涉及登錄數據庫。 我們的組織要求我們每 6 個月更改一次密碼 - 密碼更改過程可能非常緩慢 - 有時需要長達 10 分鍾。 但是,在通過我們的工具更改密碼(並生效)和可以在我們的 Linux 機器上的硬編碼實例中進行更改之間的延遲期間,此作業將導致多次登錄數據庫失敗。 一旦超過某個數字,該帳戶就會被鎖定 - 因此我們所有后續的工作都會失敗,直到我們可以與 DBA 聯系以解鎖該帳戶。

盡管這里展示了所有有問題的做法(硬編碼密碼等) - 我正在尋找一種方法,讓 cron 作業在登錄失敗時從計划中退出。 是的,在更改密碼之前手動執行此操作是可能的 - 但並非每個經歷此過程的人都非常了解 linux/cron/vi - 因此我尋找某種形式的靈丹妙葯,如果可能的話,可能會避免這種情況。

任何建議非常感謝。

為了防止 cron 作業多次失敗,您需要一個信號量文件。 此解決方案類似於tvm的評論。 在 cron 作業之外創建信號量文件,如下所示:

touch is_ok.txt

每次失敗后需要重新創建它才能使 cron 作業運行。 然后像這樣包裝你的command

if [[ -e is_ok.txt ]] && command ; then touch is_ok.txt ; else rm -f is_ok.txt ; fi

示例(使用grep foo bar作為您的 cron 作業command ):

# Enable `grep foo bar` to run:

touch is_ok.txt

# Create the input for `grep foo bar` to run successfully:

echo foo > bar

# `grep foo bar` runs successfully repeatedly:

if [[ -e is_ok.txt ]] && grep foo bar ; then touch is_ok.txt ; else rm -f is_ok.txt ; fi

# Make `grep foo bar` fail:

rm bar

# `grep foo bar` runs once, then never runs until you do `touch is_ok.txt`:

if [[ -e is_ok.txt ]] && grep foo bar ; then touch is_ok.txt ; else rm -f is_ok.txt ; fi

取決於您的機器、操作系統、外殼等……這可能會也可能不會起作用。

例如,對於 bash,您可能希望將 cron 運行的命令更改為如下所示:

*/1 * * * * 命令 || 出口

這基本上意味着:每分鍾,運行此命令或退出。 因此,如果命令失敗,它將退出。 但這仍會被記錄為登錄嘗試失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM