两个 SMB 守护进程是 /usr/sbin/smbd 和 /usr/sbin/nmbd。在大多数 Linux 发行版中,这些守护进程通过位于 /etc/rc.d/init.d/smb 的启动脚本启动、停止和重启,并通过符号链接链接到适当的运行级别。
如果您选择不使用标准启动脚本,您可以从 inetd 或作为独立进程运行 Samba 守护进程。与从 inetd 运行相比,作为独立守护进程运行时,Samba 的响应速度会稍快一些。
在任何一种情况下,您都应该检查 /etc/services 文件中是否包含如下行
netbios-ns 137/tcp nbns
netbios-ns 137/udp nbns
netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
netbios-ssn 139/tcp nbssn
确保它们都已取消注释。根据您的发行版,您甚至可能需要添加它们。除非 /etc/services 包含这些条目,否则 Samba 将无法绑定到相应的端口。
要从 inetd 运行守护进程,请将以下行添加到 inetd 配置文件 /etc/inetd.conf 中
# SAMBA NetBIOS services (for PC file and print sharing)
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
然后运行以下命令重启 inetd 守护进程
kill -HUP `cat /var/run/inetd.pid`
要从系统启动脚本运行守护进程,请将以下脚本放入名为 /etc/rc.d/init.d/smb 的文件(适用于大多数发行版),并将其符号链接到注释中指定的文件
#!/bin/sh
#
# /etc/rc.d/init.d/smb - starts and stops SMB services.
#
# The following files should be synbolic links to this file:
# symlinks: /etc/rc.d/rc1.d/K35smb (Kills SMB services on shutdown)
# /etc/rc.d/rc3.d/S91smb (Starts SMB services in multiuser mode)
# /etc/rc.d/rc6.d/K35smb (Kills SMB services on reboot)
#
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
# See how we were called.
case "$1" in
start)
echo -n "Starting SMB services: "
daemon smbd -D
daemon nmbd -D
echo
touch /var/lock/subsys/smb
;;
stop)
echo -n "Shutting down SMB services: "
killproc smbd
killproc nmbd
rm -f /var/lock/subsys/smb
echo ""
;;
*)
echo "Usage: smb {start|stop}"
exit 1
esac
如果在启动 Samba 时,您收到一个错误,提示守护进程无法绑定到端口 139,那么您可能已经有另一个 Samba 进程正在运行,但尚未关闭。检查进程列表(使用 'ps auxww | grep mbd')以确定是否还有另一个 Samba 服务正在运行。