Или не только %post_service Просто так работает (p11): # service ntpd restart Stopping ntpd service: [ DONE ] Starting ntpd service: [ DONE ] rpm-4.13.0.1-alt40: # rpm -Uvh --force ntpd_4.2.8p18-alt1%3ap11+374399.200.2.1@1739522518_x86%5f64.rpm Preparing... ############################################################ [100%] Updating / installing... 1: ntpd-4.2.8p18-alt1 ############################################################ [100%] Service ntpd is not running.[PASSED] Starting ntpd service: daemon control: got EOF [FAILED] В p10 c rpm-4.13.0.1-alt34 всё хорошо: # rpm -Uvh --force ntpd_4.2.8p18-alt1%3ap10+363449.100.1.1@1732654665_i586.rpm Preparing... #################################################################### [100%] Updating / installing... 1: ntpd-4.2.8p18-alt1 #################################################################### [100%] Stopping ntpd service: [ DONE ] Starting ntpd service: [ DONE ]
И ладно бы 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 ?
*** This bug has been marked as a duplicate of bug 51911 ***