我该如何禁用 avahi-daemon,如果它作为服务出现但不在 rcN.d 中,您能向我解释它如何运行吗?
你可以在这里停止阅读。事实上,除非你想教新手一些 Ubuntu,否则请停止阅读。上面的问题应该足够清楚,可以回答。剩下的只是我呼吁一些更结构化的方式来找到 Ubuntu 的方法。我或多或少可以使用其他“类 UNIX”系统。
我是一个初学者,所以如果我的行为毫无意义,请把我当成你每天的 WTF,但请帮助我进步。
每次启动时,/sbin/init
似乎都会启动一个名为avahi-daemon
# initctl list | grep avahi
avahi-daemon start/running, process 1280
作为用户avahi
# id avahi
uid=107(avahi) gid=118(avahi) groups=118(avahi)
aps -efww ef
显示有 2 个进程处于活动状态,均称为avahi-daemon
,并且PPID
第一个进程的avahi-daemon
确实是1
,第二个进程只是第一个进程的子进程。PPID
=1
使我认为这是自动启动的。
可选:
我真的不知道如何正确检查系统启动时执行了什么,想想吧。
这是获取启动时运行的服务列表的方法吗? initctl list | sort
无论如何,我似乎可以通过这个命令暂时停止这个“服务”:
service avahi-daemon stop
或者实际上是这个命令
/etc/init.d/avahi-daemon stop
直接,这似乎/usr/sbin/service
是在使用:
env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE"
启动后,脚本提醒我正在控制“Upstart”服务,并且应该使用更简单的调用stop avahi-daemon
。我想我需要了解 Upstart,但现在,我需要了解的是:
如何在 Ubuntu 中禁用服务?
这是我尝试过的(这应该是正确的方法,或者不是吗?):
update-rc.d avahi-daemon disable
但它抱怨:
System start/stop links for /etc/init.d/avahi-daemon do not exist
因此我开始寻找二进制文件的路径:
# Let me know if there is a better way to get the path above
readlink "/proc/$(echo `ps --no-headers -o pid -C avahi-daemon | head -n 1`)/exe"
具体如下:
/usr/sbin/avahi-daemon
以及任何可以被视为“可执行文件”的内容etc
:
find /etc -type f -name '*avahi*' -perm -u+x
我以为我会在 中找到启动脚本/etc/rcN.d
。但我却发现了其他东西:
/etc/dhcp/dhclient-exit-hooks.d/zzz_avahi-autoipd
/etc/dhcp/dhclient-enter-hooks.d/avahi-autoipd
/etc/resolvconf/update-libc.d/avahi-daemon
/etc/network/if-up.d/avahi-autoipd
/etc/network/if-up.d/avahi-daemon
/etc/network/if-down.d/avahi-autoipd
/etc/avahi/avahi-autoipd.action
好像这个avahi-daemon
东西是在网络状态改变时启动的?有没有更好的方法来追踪系统上自动启动的二进制文件?
在这个阶段,我通常会删除各种符号链接,rc{3,5}.d
但现在我不太确定。到底是什么引发了这种问题?如何在没有apt-get remove
或的情况下禁用它apt-get purge
?
据我所知,它没有开放太多资源:
lsof -p $(echo `ps --no-headers -o pid -C avahi-daemon | head -n 1`)
从快速浏览来看,它也不会占用太多的 CPU 周期htop
。
我写了这一行代码来查看它是否会在一分钟的时间内对 CPU 利用率产生影响,但它从来没有发生过,但如果有更好的方法来检查的话,请告诉我:
for i in {1..59}; do ps -p $(echo `ps --no-headers -o pid -C avahi-daemon | head -n 1`) --no-headers -o pcpu; sleep 1; done
答案1
sudo systemctl disable avahi-daemon
在 Ubuntu Gnome 15.10 上为我工作
答案2
Upstart 启动脚本位于/etc/init
,您可以在其中找到avahi-daemon.conf
。 中列出的所有内容都initctl list
与 中的脚本相匹配/etc/init
,并且它们不可执行,因此您find
错过了它们。
要禁用 Upstart 控制的服务,请参阅Upstart 禁用服务指南:添加#
到start on
行,或使用覆盖文件(例如sudo sh -c "echo manual > /etc/init/avahi-daemon.override"
:)。
答案3
我发现即使我停止avahi-daemon
(和avahi-daemon.socket
),Firefox 也总是会重新启动它。但是,这有效,并永久禁用了这个烦人的守护进程:
apt-get remove avahi-daemon
答案4
您需要mask
阻止socket
应用程序启动avahi-daemon
:
systemctl mask avahi-daemon.socket
systemctl disable avahi-daemon
systemctl stop avahi-daemon