最近,当客户端“突然”无法访问所有共享时,我在我的 samba 服务器(Ubuntu 10.04 LTS am64)上遇到了一个奇怪的问题。跟踪错误显示smbd
未在启动时启动。从系统日志:
[...]
Dec 4 12:28:45 takkat-home dhclient:
Dec 4 12:28:45 takkat-home NetworkManager: <info> DHCP: device eth0 state changed (null) -> preinit
Dec 4 12:28:45 takkat-home init: smbd main process (1027) terminated with status 255
Dec 4 12:28:45 takkat-home init: smbd main process ended, respawning
Dec 4 12:28:45 takkat-home dhclient: Listening on LPF/eth0/00:24:1d:25:40:e4
Dec 4 12:28:45 takkat-home dhclient: Sending on LPF/eth0/00:24:1d:25:40:e4
Dec 4 12:28:45 takkat-home dhclient: Sending on Socket/fallback
Dec 4 12:28:45 takkat-home avahi-daemon[917]: No service file found in /etc/avahi/services.
Dec 4 12:28:45 takkat-home init: smbd main process (1045) terminated with status 255
Dec 4 12:28:45 takkat-home init: smbd main process ended, respawning
Dec 4 12:28:45 takkat-home init: smbd main process (1050) terminated with status 255
Dec 4 12:28:45 takkat-home init: smbd main process ended, respawning
[...]
和 smbd.log:
[...]
[2010/12/04 12:28:45, 0] smbd/server.c:1069(main)
smbd version 3.4.7 started.
Copyright Andrew Tridgell and the Samba Team 1992-2009
[2010/12/04 12:28:45, 0] printing/print_cups.c:103(cups_connect)
Unable to connect to CUPS server localhost:631 - Connection refused
[2010/12/04 12:28:45, 0] printing/print_cups.c:103(cups_connect)
Unable to connect to CUPS server localhost:631 - Connection refused
[2010/12/04 12:28:45, 0] smbd/server.c:1115(main)
standard input is not a socket, assuming -D option
[2010/12/04 12:28:45, 0] passdb/pdb_interface.c:253(guest_user_info)
guest_user_info: Unable to locate guest account [guest]!
[2010/12/04 12:28:45, 0] smbd/server.c:1201(main)
ERROR: failed to setup guest info.
[2010/12/04 12:28:45, 0] smbd/server.c:1069(main)
smbd version 3.4.7 started.
Copyright Andrew Tridgell and the Samba Team 1992-2009
[...]
很明显,smbd 崩溃了。
在此之前,我没有对 samba 配置进行任何更改,除了安全更新之外没有安装任何东西,也没有创建或删除任何新用户。今天,我通过简单的运行将所有东西都修复并像往常一样顺利运行
sudo smbd restart
启动时的崩溃消失了,共享再次可供客户端使用。
不过,我不知道是什么过程导致了这种行为,我担心将来如何避免这种情况。任何关于什么进程可以对 smbd 崩溃负责的想法将不胜感激。另外,我很想知道重新启动 smbd 可能会修复什么,以及这是否是个好主意。
请注意,如果您有多个网卡,samba 甚至可能不会尝试启动(在 sys.log 中没有 smbd 的痕迹),因为它会等待错误的网络接口启动。
ifconfig
以找到您要使用的接口。/etc/samba/smb.conf
samba 是否使用正确的界面/etc/config/smbd.conf
在启动 samba 之前等待正确的界面启动。例如,下面的行只会在 eth0 接口启动时启动 smbd:start on (local-filesystems and net-device-up IFACE=eth0 and started udev-finish)
我快速浏览了网络,它看起来像是权限问题或时间问题。例如我运行docky,通常它在登录后弹出一条通知,提示compiz未启用并且某些功能不会启用,但是当它实际出现时compiz已经有时间启动并且docky很好。如果 compiz 尚未启动,Docky 有能力回退到更基本的形式。然而,AWN(前卫窗口导航器)不会这样做,并且如果 compiz 不存在,即使它设法在以后的“日期”让它变得懒惰,也不会加载。尽管我所有的闲聊都是关于视觉 gui 元素的,但该理论也应该适用于服务程序。
希望这有助于或至少给你一个想法。
如果确实是时间问题,则可能意味着 smbd 启动前所需的某些事情(我猜是网络服务)没有及时发生。事实上,您可以在启动后启动它,这意味着您可能只需将它设置为非常低的启动优先级(即在最后,因为它似乎不依赖于任何其他服务)。
您可以使用 update-rc.d 脚本来执行此操作。
对于一些背景知识,检查 /etc/rc2.d(或 /etc/rc2.d 到 /etc/rc5.d 中的任何一个),它们是设置为在系统进入运行级别 2 - 5 时自动启动的服务(对于本练习,我们假设它们是相同的)。您可能会注意到有一个S20smbd表示自动启动 smbd(链接到启动脚本/etc/init.d/smbd),优先级为 20,其中优先级低的东西首先启动,直到运行级别目录中的所有内容已处理。
通常,用户级启动将使用 99 的低优先级(最后启动),因此从 update-rc.d 文档中,我们将使用 98:
这只是意味着将默认运行级别 (2-5) 的 smbd 的自动启动更新为优先级 98,因此它几乎将是最后启动的事情(取决于您的系统设置方式)。
Ubuntu 11.04 (natty, amd64) 上还有一个问题。从引导日志:
不要通过 /etc/init.d 调用初始化脚本,而是使用 service(8) 实用程序,例如 service S20smbd start
由于您尝试调用的脚本已转换为 Upstart 作业,您还可以使用 start(8) 实用程序,例如 start S20smbd start: Unknown job: S20smbd
因此,似乎 smbd 尝试以“S20smbd”启动,因此“服务”无法识别它。再次,系统启动后重新启动 smbd 可以修复它。
我无法弄清楚新贵脚本中的问题出在哪里。任何帮助将不胜感激,谢谢。
我遇到了同样的问题。我在阅读关于在公司服务器上安装 sendmail 的操作指南时找到了解决方案。
通过在终端中键入以下内容来安装软件包sysv-rc-conf和sysvinit-utils。
然后你输入这个来配置你的系统(Ubuntu 10.04)在启动时加载nmbd :
我认为这个问题是由于
dhclient
异步启动网络接口和其他需要网络接口的服务之间的竞争。很长一段时间以来,我的 Debian 系统偶尔都没有启动 Samba,而现在 mysqld(MythTV 后端需要)基本上也发生了同样的情况,这最终促使我更深入地研究它。
如果 DHCPACK 及时到达并且 dhclient 在 Samba / mysql 启动之前调出接口,则一切正常,否则服务无法启动:
我已经通过在其 init 脚本中启动 network-manager 后添加 15 秒延迟的丑陋 hack 来修复它,并在启动顺序中在 network-manager 之后移动两个 init 脚本。
更好的方法是为网络接口添加适当的依赖项,但这似乎不适用于
sysvinit
.我认为其他解决方案风险太大(例如使用
upstart
)。