Назад | Перейти на главную страницу

Задержка запуска NIS и NFS до полной готовности сетевого интерфейса в Fedora 17

Недавно я установил сервер Fedora 17 для нашей сети, и у меня возникли проблемы с запуском службы NIS при запуске. Вот некоторые логи из системы:

Aug 21 12:57:12 cairnwell ypbind-pre-setdomain[718]: Setting NIS domain: 'indigo-nis' (environment variable)
Aug 21 12:57:13 cairnwell ypbind: Binding NIS service
Aug 21 12:57:13 cairnwell rpc.statd[730]: Unable to prune capability 0 from bounding set: Operation not permitted
Aug 21 12:57:13 cairnwell systemd[1]: nfs-lock.service: control process exited, code=exited status=1
Aug 21 12:57:13 cairnwell systemd[1]: Unit nfs-lock.service entered failed state.
Aug 21 12:57:14 cairnwell setroubleshoot: SELinux is preventing /usr/sbin/rpc.statd from using the setpcap capability. For complete SELinux messages. run sealert -l 024bba8a-b0ef-43dc-b195-5c9a2d4c4d41
Aug 21 12:57:15 cairnwell kernel: [   18.822282] bnx2 0000:02:00.0: em1: NIC Copper Link is Up, 1000 Mbps full duplex
Aug 21 12:57:15 cairnwell kernel: [   18.822925] ADDRCONF(NETDEV_CHANGE): em1: link becomes ready
Aug 21 12:57:15 cairnwell NetworkManager[621]: <info> (em1): carrier now ON (device state 20)
Aug 21 12:57:15 cairnwell NetworkManager[621]: <info> (em1): device state change: unavailable -> disconnected (reason 'carrier-changed') [20 30 40]
Aug 21 12:57:15 cairnwell NetworkManager[621]: <info> Auto-activating connection 'System em1'.
Aug 21 12:57:15 cairnwell NetworkManager[621]: <info> Activation (em1) starting connection 'System em1'
Aug 21 12:57:15 cairnwell NetworkManager[621]: <info> (em1): device state change: disconnected -> prepare (reason 'none') [30 40 0]
.......
Aug 21 12:57:19 cairnwell sendmail[790]: YPBINDPROC_DOMAIN: Domain not bound
Aug 21 12:57:26 cairnwell sendmail[790]: YPBINDPROC_DOMAIN: Domain not bound
Aug 21 12:57:31 cairnwell sendmail[790]: YPBINDPROC_DOMAIN: Domain not bound
Aug 21 12:57:35 cairnwell sendmail[790]: YPBINDPROC_DOMAIN: Domain not bound
Aug 21 12:58:00 cairnwell ypbind: Binding took 47 seconds
Aug 21 12:58:00 cairnwell ypbind: NIS server for domain indigo-nis is not responding.
Aug 21 12:58:01 cairnwell ypbind: Killing ypbind with PID 733.
Aug 21 12:58:01 cairnwell ypbind-post-waitbind[734]: /usr/lib/ypbind/ypbind-post-waitbind: line 51: kill: SIGTERM: invalid signal specification
Aug 21 12:58:01 cairnwell systemd[1]: ypbind.service: control process exited, code=exited status=1
Aug 21 12:58:01 cairnwell systemd[1]: Unit ypbind.service entered failed state.

Судя по этим журналам, служба ypbind запускается в 12:57:12, но сетевой интерфейс не работает до 12:57:15. Я предполагаю, что это вызывает тайм-аут ypbind при попытке подключения.

Как следствие, сбой NIS вызывает проблемы с NFS, которая больше не может правильно отображать UID. Эта проблема, похоже, не решается путем фактического запуска ypbind и т. Д., Поэтому мне пришлось установить для всех своих общих ресурсов NFS значение noauto.

Я пробовал вручную добавить NETWORKDELAY и NETWORKWAIT в / etc / sysconfig / network, а также запущен systemctl enable NetworkManager-wait-online.service как я видел, предлагалось в некоторых местах, но ни один из них не оказал никакого эффекта.

Относительно легко исправить вручную, перезапустив ypbind и смонтируя общие ресурсы NFS после запуска сети, но делать это каждый раз при перезагрузке сервера далеко не идеально.

Кто-нибудь знает простой (и желательно без взлома) способ отложить запуск ypbind до тех пор, пока сетевой интерфейс не будет полностью готов?

Я отправляю ответ, потому что для комментирования необходимо> 50 репутации.

Я собираюсь указать вам на это очень хорошая статья на случай, если вы еще не наткнулись на это.

Также есть очень интересная строка:

В качестве альтернативы вы можете изменить свою службу, для которой сеть должна быть в рабочем состоянии, включив After = network-online.target и Wants = network-online.target.

Обратите внимание на "Альтернативно".

Итак, вам, вероятно, придется создать этот файл: /etc/systemd/system/ypbind.service.d/waitfornetwork.conf

[Service]
After=network-online.target
Wants=network-online.target

Этот ответ возможно решение. Не гарантированный решение.