LINUX.ORG.RU
ФорумAdmin

NUT не стартует автоматом в Centos 7

 , ,


0

1

Доброго времени суток. Уже сломал голову и много раз был в гугле, прошу туда не посылать.)
Не могу победить автостарт сервиса nut-server (Network Ups Tools) в Centos 7 (x86_64).
Исходные данные.

  • OS - Centos 7 (x86_64). Ядро последнее 3.10.0-693.17.1.el7.x86_64 #1 SMP
  • Все пакеты обновлены.
  • ФС - xfs
  • Установлены пакеты: nut-2.7.2-3.el7.x86_64 nut-client-2.7.2-3.el7.x86_64

Конфиги:
/etc/ups/nut.conf

MODE=netserver
/etc/ups/ups.conf
[SmartUPS3]
driver = apcsmart
port = /dev/ttya001
cable = 940-024C
desc = "APS Smart-UPS 2200"
/etc/ups/upsd.users
[admin]
        password = 123456
        actions = SET
        instcmds = ALL

[upsmon_local]
        password  = 123456
        upsmon master

[upsmon_remote]
        password  = 123456
        upsmon slave
/etc/ups/upsmon.conf
/etc/ups/upsmon.conf
RUN_AS_USER nut
MONITOR SmartUPS3@localhost 0 upsmon_local 123456 master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/bin/upsnotify
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE        "UPS %s online power"
NOTIFYMSG ONBATT        "UPS %s onbattery"
NOTIFYMSG LOWBATT       "UPS %s battery is low"
NOTIFYMSG FSD           "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK        "Communications with UPS %s established"
NOTIFYMSG COMMBAD       "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN      "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT      "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM        "UPS %s is unavailable"
NOTIFYMSG NOPARENT      "Upsmon parent process died - shutdown impossible"

NOTIFYFLAG ONLINE       SYSLOG+EXEC
NOTIFYFLAG ONBATT       SYSLOG+EXEC
NOTIFYFLAG LOWBATT      SYSLOG+EXEC
NOTIFYFLAG FSD          SYSLOG+EXEC
NOTIFYFLAG COMMOK       SYSLOG+EXEC
NOTIFYFLAG COMMBAD      SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN     SYSLOG+EXEC
NOTIFYFLAG REPLBATT     SYSLOG+EXEC
NOTIFYFLAG NOCOMM       SYSLOG+EXEC

RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
Сервис nut-server добавлен в автозагрузку через systemd
systemctl enable nut-server
systemctl start nut-server
После ребута сервера такая картина:
# service nut-server status
Redirecting to /bin/systemctl status nut-server.service
● nut-server.service - Network UPS Tools - power devices information server
   Loaded: loaded (/usr/lib/systemd/system/nut-server.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

янв 26 19:33:19 aa27.niisi.ru systemd[1]: Dependency failed for Network UPS Tools - power devices information server.
янв 26 19:33:19 aa27.niisi.ru systemd[1]: Job nut-server.service/start failed with result 'dependency'.
В логах вот что:
Jan 25 23:09:56 aa27 upsdrvctl: Can't chdir to /var/run/nut: No such file or directory
Jan 25 23:09:56 aa27 systemd: nut-driver.service: control process exited, code=exited status=1
Jan 25 23:09:56 aa27 systemd: Job nut-server.service/start failed with result 'dependency'.
Jan 25 23:09:56 aa27 systemd: Unit nut-driver.service entered failed state.
Jan 25 23:09:56 aa27 systemd: nut-driver.service failed.
Jan 25 23:14:05 aa27 systemd-tmpfiles: Failed to open '/etc/tmpfiles.d/nut-run.conf', ignoring: No such file or directory
Самое интересное, что ручками запускается:
service nut-server start
И вуяля. Итак, я понял что есть некий косяк с systemd. Пробовал откатиться на предыдущую версию - не помогло
(это сосбтвенно и рекомендовали в интернетах).
Посмотрел внимательно юниты старта сервера, их три:
nut-server.service
[Unit]
Description=Network UPS Tools - power devices information server
After=local-fs.target network.target nut-driver.service
Requires=nut-driver.service
Before=nut-monitor.service

[Service]
ExecStart=/usr/sbin/upsd -F
Type=simple

[Install]
WantedBy=multi-user.target
nut-driver.service
[Unit]
Description=Network UPS Tools - power device driver controller
After=local-fs.target network.target
StopWhenUnneeded=yes

[Service]
ExecStartPre=-/usr/bin/systemd-tmpfiles --create /etc/tmpfiles.d/nut-run.conf
ExecStart=/usr/sbin/upsdrvctl start
ExecStop=/usr/sbin/upsdrvctl stop
Type=forking
nut-monitor.service
[Unit]
Description=Network UPS Tools - power device monitor and shutdown controller
After=local-fs.target network.target nut-server.service

[Service]
ExecStartPre=-/usr/bin/systemd-tmpfiles --create /etc/tmpfiles.d/nut-run.conf
ExecStart=/usr/sbin/upsmon -F
Type=simple

[Install]
WantedBy=multi-user.target
Согласно данной схеме, сначала должен стартовать драйвер, потом, сервер, потом монитор.
Что выяснилось - если отключить автостарт и запускать последовательно драйвер ...(упс и сразу облом)
Jan 25 23:09:56 aa27 upsdrvctl: Can't chdir to /var/run/nut: No such file or directory
/var/run/nut появляется после того как стартует nut-monitor.service.
Пробовал менять порядок загрузки сервисов, но не взлетело. Не силен в systemd.
Прошу дать правильное направление. И вот еще, касательно вот этой ошибки:
/usr/bin/systemd-tmpfiles --create /etc/tmpfiles.d/nut-run.conf
Failed to open '/etc/tmpfiles.d/nut-run.conf', ignoring: No such file or directory
Что за фигня? Серсис systemd-tmpfiles-setup запущен.
# systemctl status systemd-tmpfiles-setup
● systemd-tmpfiles-setup.service - Create Volatile Files and Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: disabled)
   Active: active (exited) since Пт 2018-01-26 19:33:18 MSK; 2h 2min left
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 481 ExecStart=/usr/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev (code=exited, status=0/SUCCESS)
 Main PID: 481 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/systemd-tmpfiles-setup.service

янв 26 19:33:18 aa27.niisi.ru systemd[1]: Starting Create Volatile Files and Directories...
янв 26 19:33:18 aa27.niisi.ru systemd[1]: Started Create Volatile Files and Directories.

/etc/tmpfiles.d/nut-run.conf', ignoring: No such file or directory

Ну сделали кривой пакет, кто-то забыл положить файл или положил не в то место. Сделайте симлинк, или скопируйте, или напишите сами.

Nastishka ★★★★★
()
Ответ на: комментарий от bearpuh

Не помогло чему? Временный каталог указанный создался? Драйвер стартует? Какие сообщения?

«Я уж и фары протер, и по колесам попинал - а всё одно, не заводится»

Nastishka ★★★★★
()
Ответ на: комментарий от Nastishka

После ребута такая же картина:

service nut-server status -l
Redirecting to /bin/systemctl status  -l nut-server.service
● nut-server.service - Network UPS Tools - power devices information server
   Loaded: loaded (/usr/lib/systemd/system/nut-server.service; enabled; vendor preset: disabled)
   Active: inactive (dead)

янв 26 21:31:03 aa27.niisi.ru systemd[1]: Dependency failed for Network UPS Tools - power devices information server.
янв 26 21:31:03 aa27.niisi.ru systemd[1]: Job nut-server.service/start failed with result 'dependency'.

Временный каталог создается (/run/nut), драйвер не стартует.
Jan 26 21:31:03 aa27 systemd: nut-driver.service: control process exited, code=exited status=1
Jan 26 21:31:03 aa27 systemd: Job nut-server.service/start failed with result 'dependency'.
Jan 26 21:31:03 aa27 systemd: Unit nut-driver.service entered failed state.
Jan 26 21:31:03 aa27 systemd: nut-driver.service failed.
Надо уровень логирования изменить на systemd, иначе не ясно на каком этапе затык.
Есть у меня одна мысль. Дело в том, что com порт, к которому подсоединен ups это виртуальное устройство размапленное специальным драйвером к IP:port железки Aten (Serial Over IP). Возможно оно не успевает создасться перед стартом драйвера.
Как unit'у nut-driver.service «объяснить» стартовать после создания девайса /dev/ttya001 ?

bearpuh
() автор топика
Ответ на: комментарий от bearpuh

Так и есть:
# journalctl -u nut-driver.service

янв 26 21:31:03 aa27.niisi.ru systemd[1]: Starting Network UPS Tools - power device driver controller...
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: Fatal error: unusable configuration
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: Network UPS Tools - APC Smart protocol driver 3.1 (2.7.2)
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: APC command table version 3.1
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: Unable to open /dev/ttya001: No such file or directory
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: Things to try:
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: - Check 'port=' in ups.conf
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: - Check owner/permissions of all parts of path
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: Driver failed to start (exit status=1)
янв 26 21:31:03 aa27.niisi.ru upsdrvctl[792]: Network UPS Tools - UPS driver controller 2.7.2
янв 26 21:31:03 aa27.niisi.ru systemd[1]: nut-driver.service: control process exited, code=exited status=1
янв 26 21:31:03 aa27.niisi.ru systemd[1]: Failed to start Network UPS Tools - power device driver controller.
янв 26 21:31:03 aa27.niisi.ru systemd[1]: Unit nut-driver.service entered failed state.
янв 26 21:31:03 aa27.niisi.ru systemd[1]: nut-driver.service failed.

bearpuh
() автор топика
Ответ на: комментарий от bearpuh

Кому интересно, решил вот таким образом:

/lib/udev/rules.d/99-systemd.rules

KERNEL=="ttya001", SYMLINK="ttya001", TAG+="systemd"
/usr/lib/systemd/system/nut-driver.service
[Unit]
Description=Network UPS Tools - power device driver controller
Wants=dev-ttya001.device
After=dev-ttya001.device

bearpuh
() автор топика
Ответ на: комментарий от trancefer

Не, это не костыль. Это как раз по феншую. Смотрим описание в третьей ссылке.
Раз: https://unix.stackexchange.com/questions/186899/how-to-wait-for-a-dev-video0-before-starting-a-service
Два:https://lists.fedoraproject.org/pipermail/devel/2012-January/160917.html
Три:https://www.freedesktop.org/software/systemd/man/systemd.device.html

bearpuh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.