為 git fetch / ubuntu motd 引起的殭屍尋求乾淨的解決方案
我在同一台 [Ubuntu 10.04] 伺服器上執行 jenkins 和 gitosis。Jenkins 從 gitosis 提供的儲存庫中獲取 git 送出(也在同一台伺服器上執行)。實際上,很多回購,因為詹金斯有很多工作。時不時我會遇到一個殭屍
who
程序,其根本原因似乎是一些特定於 Ubuntu 的腳本來更新 /etc/motd。這是今天早些時候程序表的(部分)樣子:jenkins 30042 1 0 Mar19 ? 00:00:00 git fetch -t gitosis@example.com:testRepo.git +refs/heads/*:refs/remotes/origin/* jenkins 30060 30042 0 Mar19 ? 00:00:00 ssh gitosis@example.com 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 腳本嗎?就像,只有詹金斯在做什麼
git fetch
?實際上,如果我可以在 gitosis 使用者嘗試 SSH 時以某種方式禁用 motd 腳本(例如,每當發生任何 git 客戶端/伺服器互動時),那將是完美的。也許 Bash 有一種簡單的方法可以殺死任何執行了一個多小時的 git 程序?啊。
我通常喜歡這些腳本提供的方便的 motd,所以我不想完全禁用它們。如果他們自己超時當然會很好。為什麼每次登錄都會更新motd?一天一次似乎足夠了。
我真的不想切換到 gitolite 或不同的 git 伺服器,否則 gitosis 可以正常工作。我不想切換到 SSH 以外的其他協議;gitosis 依賴於 SSH。由於 gitosis 在同一台伺服器上執行,我應該能夠使用
file:///
語法引用 git 儲存庫。我現在試一試。更新…不,這不起作用,因為它繞過了 gitolite 並且不允許詹金斯將標籤推回上游。我可以給詹金斯更多的ACL,但我寧願堅持使用gitolite。旁注:這無濟於事,因為在建立 SSH 連接後出現問題。
如果我沒看錯,我喜歡認為我是..
然後你要求一種非常迂迴的方式來禁用
update-motd
ubuntu。看看
/etc/cron.d
,/etc/cron.d/update-motd
如果你找到了,把它 mv 到 /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 的人的博文;)