Вопрос или проблема
Я пытаюсь настроить сервер Samba на сервере Ubuntu (18.04). Мне пришлось собирать из источников, так как мне нужна специальная поддержка для Mac OS и Time Machine, которая доступна только в версиях 4.8 или выше.
Я пытался установить 4.9.2 и следовал инструкциям здесь, с тем исключением, что мне нужно было отключить поддержку LDAP и AD для конфигурации. Сборка и установка прошли нормально, поэтому я скопировал файлы systemctl в нужное место и попытался запустить всё.
super@fulton:~/samba/samba-samba-4.9.2$ sudo systemctl start {nmb,smb,winbind}.service
Работа для nmb.service завершилась неудачей из-за превышения времени ожидания.
Смотрите "systemctl status nmb.service" и "journalctl -xe" для деталей.
Работа для winbind.service завершилась неудачей из-за превышения времени ожидания.
Смотрите "systemctl status winbind.service" и "journalctl -xe" для деталей.
Работа для smb.service завершилась неудачей из-за превышения времени ожидания.
Смотрите "systemctl status smb.service" и "journalctl -xe" для деталей.
статус показывает:
● smb.service - Демон Samba SMB Загрузлено: загружено (/lib/systemd/system/smb.service; включен; предустановленный: включен) Активно: неудачно (Результат: превышение времени ожидания) с Чт 2019-01-31 14:46:34 NZDT; 13 мин. назад Документы: man:smbd(8) man:samba(7) man:smb.conf(5) Процесс: 12343 ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS (код=убит, сигнал=TERM) Основной PID: 12343 (код=убит, сигнал=TERM) 31 Янв 14:45:04 fulton.geek.nz systemd[1]: Запускается демон Samba SMB... 31 Янв 14:46:34 fulton.geek.nz systemd[1]: smb.service: операция запуска превысила время ожидания. Завершение. 31 Янв 14:46:34 fulton.geek.nz systemd[1]: smb.service: неудача с результатом 'timeout'. 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
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
Я столкнулся с этим, пытаясь запустить разные типы машин с последней версией Samba для использования с Time Machine.
Одно из решений – изменить Type=notify на Type=simple. Есть что-то в новых версиях Samba, что не работает хорошо с тем, как systemd обрабатывает коммуникацию процессов.
-Type=notify
+Type=simple
Затем выполните systemctl daemon-reload и попробуйте запустить снова.
Одна из причин, по которой Samba может не загрузиться, связана с неправильной конфигурацией сети.
Вы можете проверить, является ли это проблемой, следуя этому руководству, которое заставит Lambda загрузить настройки сети по умолчанию:
-
Откройте файл настроек 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
# Здесь некоторый информационный текст
# bind interfaces only = x
Это заставит Samba использовать настройки по умолчанию.
- Нажмите ESC, затем введите
:wq
и нажмите Enter (Если вы использовали nano, нажмите Ctrl+O, а затем Ctrl+X).
-
Перезагрузите службу Samba, выполнив:
sudo systemctl restart nmbd
-
Проверьте статус Samba, выполнив следующую команду:
systemctl status nmbd.service
-
Теперь терминал должен напечатать
active(running)
зеленым цветом
Проблема больше не существует после удаления всех файлов systemd. Проблема может заключаться в том, что у вас есть файл systemd от более старой установки Samba. Эти файлы нужно удалить. В версии 4.10.10 она не поставляется с файлом systemd, они создаются автоматически из /etc/init.d/smbd. Проверьте вывод, он должен выглядеть так:
-> % sudo systemctl status smbd.service
● smbd.service - LSB: демон Samba SMB/CIFS (smbd)
Загрузено: загружено (/etc/init.d/smbd; сгенерировано)
Ответ или решение
Ситуация, при которой Samba не запускается из-за тайм-аута в системе systemctl, может быть связана с различными конфигурационными и сетевыми проблемами. Рассмотрим шаги для диагностики и решения этой проблемы на примере установки Samba на Ubuntu 18.04.
1. Причина проблемы
Ваша проблема заключается в том, что службы Samba (smb, nmb и winbind) не могут запуститься должным образом, и в результате возникает тайм-аут. Исходя из предоставленной информации, сервисы запускаются в фоновом режиме с помощью флага --foreground
, что вызывает недопонимание в том, как systemd отслеживает состояние этих процессов.
2. Изменение конфигурации сервиса
Один из вариантов решения данной проблемы — поменять тип сервиса в файле конфигурации systemd с Type=notify
на Type=simple
. Это полезно, когда новые версии Samba могут не корректно взаимодействовать с механизмами системного управления процессов. Выполните следующие шаги:
-
Откройте файл конфигурации для службы Samba:
sudo vi /lib/systemd/system/smb.service
-
Измените строку
Type=notify
наType=simple
. В результате, секция[Service]
должна выглядеть так:[Service] Type=simple NotifyAccess=all PIDFile=/var/run/samba/smbd.pid ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS
-
Сохраните изменения и выйдите из редактора.
-
Перезагрузите конфигурацию systemd:
sudo systemctl daemon-reload
-
Попробуйте снова запустить службы Samba:
sudo systemctl start {nmb,smb,winbind}.service
3. Проверка конфигурации сети
Некорректная настройка сети может быть еще одной причиной, по которой Samba не запускается. Проверьте файл конфигурации Samba (/etc/samba/smb.conf
) и временно отключите настройки интерфейса:
-
Откройте файл:
sudo vi /etc/samba/smb.conf
-
Найдите строки, связанные с
interfaces
иbind interfaces only
, и закомментируйте их, добавив символ#
в начале, чтобы временно использовать настройки по умолчанию:# interfaces = х.х.х.х/х # bind interfaces only = yes
-
Сохраните и закройте файл.
-
Перезапустите службы Samba:
sudo systemctl restart {nmb,smb,winbind}.service
4. Очистка файлов systemd
Если после всех изменений проблемы сохраняются, убедитесь, что у вас нет конфликтующих файлов systemd, созданных предыдущими установками Samba. Удалите устаревшие файлы и убедитесь, что ваши конфигурационные файлы актуальны.
5. Логи и диагностика
Не забудьте проверить логи Samba для получения дополнительной информации о проблемах:
tail -f /var/log/samba/log.smbd
Также просмотрите вывод команды:
journalctl -xe
Это поможет выявить возможные ошибки или конфликты.
Заключение
В большинстве случаев проблема, связанная с тайм-аутом при запуске служб Samba в systemd, может быть решена изменением конфигурации службы и проверкой сетевых настроек. Следуя указанным выше шагам, вы сможете устранить возникшие проблемы и успешно запустить сервер Samba.