Linux

bash 完成導致在 Ubuntu 14.04 上重新啟動

  • December 20, 2017

更新

set -x 似乎產生了一些有用的調試資訊。systemctl高度懷疑自己執行systemctl list-units --full --all會導致相同的重新啟動。我想我會深入研究的。

set -x
service [TAB]
   ...
   etc/init.d/unattended-upgrades /etc/init.d/unscd /etc/init.d/urandom
   + shopt -u nullglob
   + COMPREPLY+=($( systemctl list-units --full --all 2>/dev/null |                   awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' ))
   ++ systemctl list-units --full --all
   ++ awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }'

   Broadcast message from root@server
       (/dev/pts/1) at 12:02 ...

   The system is going down for reboot NOW!
   + COMPREPLY=($( compgen -W '${COMPREPLY[@]#${sysvdirs[0]}/}' -- "$cur" ))
   ++ compgen -W '${COMPREPLY[@]#${sysvdirs[0]}/}' -- ''
   + [[ -e /etc/mandrake-release ]]
   Connection to server.mydomain.net closed by remote host.
   Connection to server.mydomain.net closed.

我有一台執行 Ubuntu 14.04 並帶有最新更新檔的虛擬機。當我輸入service+

$$ TAB $$機器立即重新啟動。其他 bash 完成似乎工作正常,例如:ls [TAB]. 只有完成 forservice似乎是有問題的。系統日誌還沒有顯示任何明顯的東西。如果我解除安裝bash-completion軟體包,問題就會消失。重新安裝它,問題又回來了。任何想法在哪裡尋找故障排除?

事實證明。管理員用/bin/systemctl包含單個命令的 shell 腳本替換了二進製文件reboot。我不知道為什麼有人會這樣做,但由於已經有兩個人支持了這個問題,我想我會回答的。我什至不認為該命令是 14.04 的一部分(檢查了一些其他機器 - 它不存在)所以這更加奇怪。

這裡值得注意的一點是,它set -x幫助我找到了問題所在。

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