我尝试在 ubuntu 服务器 (18.04) 上设置 samba 服务器。我需要从源代码进行编译,因为我需要对 Mac OS 和时间机器的特殊支持,而时间机器仅在 4.8 或更高版本中可用。
我尝试安装 4.9.2 并按照说明进行操作这里但我需要禁用对 configure 的 LDAP 和 AD 支持。构建和安装进行得很顺利,因此我将 systemctl 文件复制到位并尝试启动一切。
super@fulton:~/samba/samba-samba-4.9.2$ sudo systemctl start {nmb,smb,winbind}.service
Job for nmb.service failed because a timeout was exceeded.
See "systemctl status nmb.service" and "journalctl -xe" for details.
Job for winbind.service failed because a timeout was exceeded.
See "systemctl status winbind.service" and "journalctl -xe" for details.
Job for smb.service failed because a timeout was exceeded.
See "systemctl status smb.service" and "journalctl -xe" for details.
状态给出:
● smb.service - Samba SMB 守护进程 已加载:已加载(/lib/systemd/system/smb.service;已启用;供应商预设:已启用) 活动:失败(结果:超时)自 2019-01-31 星期四 14:46:34 NZDT;13 分钟前 文档:man:smbd(8) 人:桑巴(7) 手册:smb.conf(5) 进程:12343 ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS(代码=killed,信号=TERM) 主 PID:12343(代码=已杀死,信号=TERM) 1 月 31 日 14:45:04 fulton.geek.nz systemd[1]: 正在启动 Samba SMB 守护进程... 1 月 31 日 14:46:34 fulton.geek.nz systemd[1]: smb.service: 启动操作超时。正在终止。 1 月 31 日 14:46:34 fulton.geek.nz systemd[1]: smb.service: 失败,结果为“超时”。 1 月 31 日 14:46:34 fulton.geek.nz systemd[1]: 无法启动 Samba SMB 守护进程。
但是 /var/log/samba/log.smbd 表明服务已启动。
[2019/01/31 14:45:04.465362,0] ../lib/util/become_daemon.c:138(daemon_ready) daemon_ready:STATUS=守护进程“smbd”已完成启动并准备好提供连接
因此看起来好像 systemd 脚本有问题,并且当它没有得到某些预期的响应时就会终止该进程。
有什么想法要寻找什么吗?
更新:我成功地从命令行启动了 smbd 并附加到共享,这表明 systemd 脚本存在问题。我注意到 smbd 是用 --foreground 调用的,这是正确的吗?我猜 systemd 打算将进程本身置于后台以便管理它?
配置如下:
[Unit]
Description=Samba SMB Daemon
Documentation=man:smbd(8) man:samba(7) man:smb.conf(5)
Wants=network-online.target
After=network.target network-online.target nmb.service winbind.service
[Service]
Type=notify
NotifyAccess=all
PIDFile=/var/run/samba/smbd.pid
LimitNOFILE=16384
EnvironmentFile=-/etc/sysconfig/samba
ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
答案1
当我尝试让不同类型的机器运行最新版本的 Samba 以供时间机器使用时,我也遇到了这个问题。
一个解决方案是将 Type=notify 更改为 Type=simple。新版本的 Samba 与 systemd 处理进程通信的方式不太兼容。
-Type=notify
+Type=simple
然后运行systemctl 守护进程重新加载并尝试重新启动它。
答案2
以下对我有用:
运行以下命令来编辑 samba 设置:
sudo vi /etc/samba/smb.conf
按下a键一次(用于启用 vi 上的编辑模式)
评论(#在行首添加井号标签 ( ))
interfaces = x.x.x.x/x
也评论
bind interfaces only = x
现在看起来应该像这样:
# interfaces = x.x.x.x/x
# There is some info text
# bind interfaces only = x
按下ESC然后输入
:wq
并按下 intro (如果您使用 nano,则应该按下Ctrl+O然后按下Ctrl+X)。重新加载 samba 服务并运行:
sudo systemctl restart nmbd
现在,我们将检查它是否有效。运行以下命令:
systemctl status nmbd.service
终端现在应该
active(running)
以绿色打印
答案3
删除所有 systemd 文件后,问题不再存在。问题可能是您有一个来自旧版 samba 安装的 systemd 文件。需要删除这些文件。在 4.10.10 中,它不附带 systemd 文件,它们是从 /etc/init.d/smbd 自动生成的。检查输出应该显示以下内容:
-> % sudo systemctl status smbd.service
● smbd.service - LSB: Samba SMB/CIFS daemon (smbd)
Loaded: loaded (/etc/init.d/smbd; generated)