| Summary: | Сломался вызов %post_service | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Sergey Y. Afonin <asy> |
| Component: | service | Assignee: | placeholder <placeholder> |
| Status: | CLOSED DUPLICATE | QA Contact: | qa-sisyphus |
| Severity: | major | ||
| Priority: | P5 | CC: | arseny, at, glebfm, imz, ldv, legion, placeholder, sem, vt |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| See Also: | https://bugzilla.altlinux.org/show_bug.cgi?id=51911 | ||
|
Description
Sergey Y. Afonin
2025-10-24 13:25:31 MSK
И ладно бы ntpd, взял и перезапустил. Но когда то же самое происходит с bird и отпадает маршрутизация на хосте в нескольких километрах, то начинаются немного нервные поиски решения, как попасть, особенно если OSPF нейбор коммутатор, у которого в ssh только старые алгоритмы... 1. Оно же пишет, что оно его пытается рестартануть, следовательно макрос выполнил свою функцию. 2. Но, с точки зрения service, он перед этим "не запущен": Service ntpd is not running.[PASSED] и затем он не запустился: Starting ntpd service: daemon control: got EOF Я меня внутри докера воспроизводится похожая ситуация: [root@43268c878a2a /]# service ntpd restart Service ntpd is not running. [PASSED] Starting ntpd service: [ DONE ] [root@43268c878a2a /]# service ntpd restart Service ntpd is not running. [PASSED] Starting ntpd service: daemon control: got EOF При этом ntpd процесс запущен. В случае с докером ntpd не до конца проинициализировался и start-stop-daemon определяет, что процесс "не запущен", по причине, что процесс из /var/run/ntpd.pid хоть и существует, но не имеет нужный uid. [root@43268c878a2a /]# start-stop-daemon --start -N 0 --exec /sbin/ntpd --pidfile /var/run/ntpd.pid --user ntpd --test Would start /sbin/ntpd . Для иллюстрации если убрать `--user ntpd`, то он его начинает замечать: [root@43268c878a2a /]# start-stop-daemon --start -N 0 --exec /sbin/ntpd --pidfile /var/run/ntpd.pid --test /sbin/ntpd already running. Если проблема не в самом ntpd, то может service сломался? (Ответ для Vitaly Chikunov на комментарий #2) > 2. Но, с точки зрения service, он перед этим "не запущен": > > Service ntpd is not running.[PASSED] ТАк запущен же, если "service ntpd restart" делать, и всё происходит правильно. А если этот рестарт делается из rpm через обновление пакета, то всё. И это в p11 и Сизифе. Потом ntpd только прибивать, так как PID съезжает после такого рестарта. В p10 всё в порядке, при этом в p10 тоже самый пакет ntpd, только пересобранный в p10. service-0.5.33-alt1 везде от p10 и до Сизифа. Если только в окружении что-то. Но почему только из-под rpm? Воспроизвел баг. В отличии от простого restart, при rpm -U происходит удаление старого бинарника и в start-stop-daemon, в этом случае, проверка через сравнение st_ino/st_dev невозможна и включается логика сравнения по имени бинарника указанного в --exec. Из-за usrmerge там не то же имя, что и в /proc/<pid>/exe + start-stop-daemon --stop --exec /sbin/ntpd --pidfile /var/run/ntpd.pid --user ntpd --test # ls -la /proc/$(cat /var/run/ntpd.pid)/exe lrwxrwxrwx 1 root root 0 Oct 24 20:52 /proc/2875/exe -> /usr/sbin/ntpd Предлагаю такой фикс https://git.altlinux.org/tasks/398228/ (Ответ для Vitaly Chikunov на комментарий #6) > Предлагаю такой фикс > https://git.altlinux.org/tasks/398228/ У меня работает. Как там с аппрувом, или снова проблема с перфекционизмом, как c https://bugzilla.altlinux.org/51235 ? |