HNy*_*ard 8 monitoring grep git cron
我们刚刚将服务器配置移至 Git 存储库。因此,不应在任何存储库文件夹中进行任何更改。我在考虑如何设置一个 cron 作业来检查任何未提交的更改。
如何设置 cron 作业来检查 Git 存储库中的更改?
Grepinggit status
命令的输出可能只是这样做。Grep 和 cron 工作不是我的强项。以下是一些示例输出git status
:
将包含 git 存储库(例如/path/gitrepo/
)的文件夹与已更改的文件保持一致:
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: apache2/sites-enabled/000-default
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# apache2/conf.d/test
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
没有变化时站在文件夹中:
$ git status
# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
更新:
与原点同步并不重要。应该没有本地更改。必须到位的本地文件进入 .gitignore 文件。除了服务器配置之外,还有用于内容(静态网站、Web 应用程序、wordpress 等)的 git 存储库。任何存储库都不应进行本地更改。
从长远来看,我们可能会使用 Puppet,因为它被用于开发其中一个 Web 应用程序。
git ls-files
该-m
标志将获取自上次提交以来所有修改过的文件的列表。如果没有文件被修改,则不输出数据。这使得使用此命令设置 cronjob 变得非常容易,因为默认情况下,cronjob 只会在命令输出内容时发送邮件。
删除的文件是公关。定义已修改,因此它们也将显示在修改后的视图中。如果这样做git ls-files -m -d
,删除的文件将被列出两次。
但是请注意,git ls-files -m
这只会显示已修改的文件,因此将忽略未跟踪的文件。为了还显示未跟踪的文件,您需要传递-o
“其他文件”的标志,以及传递--exclude-standard
排除.gitignore
和 中列出的文件的选项.git/info/exclude
。
从 cronjob 运行命令时,您需要分别.git
使用--git-dir
和指定目录和工作树的路径--work-tree
。请参阅git
手册页以供参考。
您需要在 cronjob 中运行的完整命令:
$ git --git-dir "/PATH/TO/DIR/.git" --work-tree "/PATH/TO/DIR" ls-files -m -o --exclude-standard
Run Code Online (Sandbox Code Playgroud)
你的 crontab 应该是这样的:
$ crontab -l # mh dom mon dow 命令 * * * * * git --git-dir "/PATH/TO/DIR/.git" --work-tree "/PATH/TO/DIR" ls-files -m -o --exclude-standard
如果有更改,这将每分钟发送一封电子邮件。如果您想要不同的设置,我建议您查看Wikipedia 页面中的示例cron
。
git-ls-files
?我推荐的理由git ls-files
了git status
是git status
一个所谓的“瓷都”的命令,同时git ls-files
是一个“管道”命令。简而言之,瓷器命令是为输出给用户而设计的,而管道命令是为脚本设计的。阅读有关 git 瓷器和 git 管道命令之间差异的更多信息。
您在问题中忽略了很多复杂性,因此我将在回答中忽略它:
if [ `git status | grep -c "working directory clean"` -ne 1 ]; then
. . . you have changes . . .
else
. . . you don't have any changes . . .
fi
Run Code Online (Sandbox Code Playgroud)
但是请注意,这不会告诉您是否已同步,或者本地更改是否合法,或者您想知道是否有更改。
您可能最好使用 Puppet 或 Chef 之类的配置管理工具来处理您的配置文件 - 最初的学习曲线可能有点陡峭,但它们极大地简化了服务器/配置管理。