[英]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.