为 git fetch / ubuntu motd 导致的僵尸寻求干净的解决方案

为 git fetch / ubuntu motd 导致的僵尸寻求干净的解决方案

我在同一个 [Ubuntu 10.04] 服务器上运行 jenkins 和 gitosis。Jenkins 从 gitosis 提供的 repo(也在同一台服务器上运行)获取 git 提交。实际上,有很多 repo,因为 Jenkins 中有很多作业。时不时地,我会遇到一个僵尸who进程,其根本原因似乎是一些用于更新 /etc/motd 的 Ubuntu 特定脚本。这是今天早些时候进程表(的一部分)的样子:

jenkins  30042     1  0 Mar19 ?        00:00:00 git fetch -t [email protected]:testRepo.git +refs/heads/*:refs/remotes/origin/*
jenkins  30060 30042  0 Mar19 ?        00:00:00 ssh [email protected] git-upload-pack 'testRepo.git'
root     30066   703  0 Mar19 ?        00:00:00 sshd: gitosis [priv]
root     30096 30066  0 Mar19 ?        00:00:00 sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/run-parts --lsbsysinit /etc/update-motd.d > /var/run/motd.new
root     30097 30096  0 Mar19 ?        00:00:00 /bin/run-parts --lsbsysinit /etc/update-motd.d
root     30129 30097  0 Mar19 ?        00:00:00 /bin/sh /etc/update-motd.d/50-landscape-sysinfo
root     30148 30129  0 Mar19 ?        00:00:00 /usr/bin/python /usr/bin/landscape-sysinfo
root     30451 30148  0 Mar19 ?        00:00:00 [who] <defunct>

为了解决这个问题,我基本上杀死了僵尸的每个父母who,然后僵尸就消失了。

关于如何防止这种情况发生或在发生时妥善处理它,您有什么想法吗?

有什么方法可以禁用这些 motd 脚本有时? 比如,只有当 Jenkins 正在执行操作时git fetch?实际上,如果我能以某种方式在 gitosis 用户尝试通过 SSH 连接时禁用 motd 脚本(例如,当发生任何 git 客户端/服务器交互时),那就太完美了。

也许有一种使用 Bash 的直接方法来终止任何运行超过一小时的 git 进程?呃。

我一般喜欢这些脚本提供的方便的 motd,所以我不想完全禁用它们。如果它们自己超时就好了。为什么每次登录时都要更新 motd?一天一次似乎就足够了。

我并不想切换到 gitolite 或其他 git 服务器,gitosis 在其他方面都运行良好。我不想切换到 SSH 以外的其他协议;gitosis 依赖于 SSH。由于 gitosis 在同一台服务器上运行,我应该能够使用file:///语法引用 git 存储库。我现在就试一试。更新...不行,这行不通,因为它会绕过 gitolite,不允许 jenkins 将标签推回上游。我可以给 jenkins 更多 ACL,但我宁愿坚持使用 gitolite。

边注:不会有帮助,因为问题似乎发生了SSH 连接已建立。

答案1

如果我读得对的话,我喜欢认为我是......

那么您要求以一种非常迂回的方式update-motd在 ubuntu 上禁用该功能。

查看/etc/cron.d/etc/cron.d/update-motd如果找到了,则将其移至 /tmp。这应该可以阻止它。

我认为你不应该终止长时间运行的进程。但我认为禁用它不会带来任何危害update-motd

你可能想看看里面/etc/update-motd.d

/usr/sbin/update-motd 使用 run-parts 按字典顺序执行 /etc/update-motd.d 中的每个脚本,并将结果与​​每日消息头 /etc/motd.tail 连接起来。

通过这种方式,用户甚至其他软件包都可以将脚本放入 /etc/update-motd.d 中来影响 MOTD。(从https://wiki.ubuntu.com/UpdateMotd

这是一篇博文来自和你一样讨厌 update-motd 的其他人 ;)

相关内容