Cron

Solaris“crontab -e”通過 vi 鎖定

  • July 31, 2015

昨天我遇到了鎖定 Solaris 和 crontab 編輯的問題,這讓我想知道在 Solaris 上保護同一 crontab 的多個並發編輯的最佳方法是什麼。我已經確認該行為存在於 Solaris 到 11.2.10.5.0。

EDITOR=vi
OS=Solaris 10, 11
SHELL=bash
RBAC=pfexec

現在通常,vi 使用 .filename.swp 文件來防止對同一文件的多次並發編輯,無論是來自多個使用者還是來自同一使用者的多次呼叫。但是,“crontab -e”會創建一個名稱基於 /tmp/crontabXXXXXX 的臨時文件並將其傳遞給 $ EDITOR, and multiple concurrent invocations of “crontab -e” will pass different temp files to $ EDITOR,可能允許在一次從兩個地方打開 crontab 時恢復對 crontab 的更改,或者當暫停的 vi 會話由於 TTY 超時而被終止時,就像我發生的那樣。在第二次呼叫“crontab -e”時,$EDITOR 也沒有警告,因為正在編輯的文件不同。

我怎樣才能防止這個問題發生?使用偽隨機臨時文件名會阻止 vi 中的內置鎖定工作,因此定址似乎是最佳途徑。也許這個問題更為根本,需要作為作業系統錯誤提出。Solaris crontab 手冊頁並沒有留下太多希望,因為它指出“同時修改同一個 crontab 文件可能會導致意外結果。”,但我希望有人能給出答案。

如果這真的是一個問題,你將不得不自己寫一些東西,因為手冊頁表明它不是內置的。

您可以為 crontab(1) 編寫一個包裝器,在執行 crontab(1) 之前進行鎖定/鎖定檢查。

在這個答案中,我建議使用 mkdir 的文件鎖定方法。

不過,這整個想法似乎並不是一件微不足道的事情。

引用自:https://serverfault.com/questions/705241