Cron

使用 git 跟踪 crontab 更改

  • October 18, 2019

我想git用來跟踪crontab.

我已經初始化了一個新的 git 儲存庫/var/spool/cron/crontabs/

現在的問題是,當保存 crontab 時,標題的第二行會發生變化,因為它包含時間戳。

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.ubNueW/crontab installed on Thu Aug  1 06:29:24 2019)

忽略這些無關更改的最簡單方法是什麼?

可能的重複問題沒有解決我的問題的要點:如何忽略 crontab 中的前 2 行不相關的行。相反,它解決了一些我沒有問過的其他問題,比如一些鉤子。

您可以使用過濾器:

git config filter.dropSecondLine.clean "sed '2d'"

編輯/創建 .git/info/attributes 並添加:

* filter=dropSecondLine

如果您不希望過濾器作用於 repo 中的所有文件,請修改 * 以匹配適當的模式或文件名。

效果將是工作目錄將保持不變,但 repo blob 在文件中不會有第二行。所以如果你把它拉到別處,第二行就不會出現(sed’d2’的結果)。如果您更改日誌文件的第二行,您將能夠添加它,但不能送出它,因為對 blob 的更改發生在添加時,此時它將與 repo 中的文件相同。

您永遠不應該手動觸摸 cron spool 目錄中的文件。對那裡的文件進行更改不會正確通知 cron 守護程序,並且在重新啟動守護程序之前,對計劃的更新不會變為活動狀態。(一些 cron 守護程序實現可能會定期檢查假離線以查看其中是否有更新的文件,但這種行為並不普遍;請查看您的cron(8)手冊)。

Ubuntu上的cron(8)手冊說

請注意,不應直接訪問此目錄中的 crontabs - 該crontab命令應用於訪問和更新它們。

您應該始終使用該crontab命令來載入新計劃或刪除現有計劃。

至於將 crontabs 保存在 Git 中,我認為這沒有問題,但是,正如我上面提到的,您不應該/var/spool/cron/crontabs簽出該儲存庫。相反,讓它存在於其他地方並手動載入 crontabs,例如

crontab my-crontab.txt

my-crontab.txt使用 Git 管理的文件在哪裡。

這還可以避免文件被 cron 守護程序修改的問題。

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