Yeniden başlatmadan systemd'i yeniden başlatabilir miyim?


39

yum updateRHEL 7.4’ten sonra hizmetleri yeniden başlatmaya çalışıyorum . Ben systemctl kullanarak her hizmeti yeniden olabilir, ama needs-restartinggelen yum utilsben de kendisini systemd yeniden başlatılsın gerektiğini söylüyor:

# needs-restarting
1 : /usr/lib/systemd/systemd --system --deserialize 21

systemdSunucuyu yeniden başlatmadan yeniden başlayabilir miyim ve nasıl?

Birkaç bahseden buldum systemctl daemon-reload, ancak bu ihtiyaçlar yeniden başlatma listesinden kaybolmuyor.

Yanıtlar:


43

Daemon'u yeniden başlatmak için

systemctl daemon-reexec

Bu belgelenmiştir manpage :systemctl

Sistem yöneticisini yeniden yönlendirin. Bu, yönetici durumunu seri hale getirecek, işlemi yeniden inceleyecek ve durumu yeniden seri hale getirecektir. Bu komut, hata ayıklama ve paket güncellemeleri dışında pek kullanılmaz. Bazen, ağır olarak faydalı olabilir daemon-reload. Arka plan programı yeniden yönlendirilirken, kullanıcı yapılandırması adına dinleyen tüm soketler sistemi erişilebilir kalacaktır.

Maalesef needs-restartingbu belirleyemez systemdaslında yeniden başladı. systemd execsişlemin başlangıç ​​zamanını sıfırlamayan yeniden başlatma; ama needs-restartingbir süreç ihtiyaçları (diğer şeyler arasında) yeniden başlatılması konusunda karar vermek üzere sürecin başlangıç zamanı ile çalıştırılabilir programın değişiklik zamanını karşılaştırır ve sonuç olarak her zaman düşünmektedir systemdolmadığını belirlemek için ... ihtiyaçları yeniden başlatılması systemd, gerçekten yeniden başlatılması gerekiyor Çıktısını kontrol edebilirsiniz lsof -p1 | grep deleted: aynı pakette gönderilen ve bu nedenle arka plan programı ile birlikte yükseltilen systemdbir kütüphane kullanır libsystemd-shared, böylece systemdyeniden başlatılması gerekirse kütüphanenin silinmiş bir sürümünü kullanarak görürsünüz. Eğer lsofgösterileri hiçbir dosya silinmiş, systemdyeniden başlatılması gerekmez. (SayesindeJeff Schaller ipucu için!)


1
@Raman, pid 1 daemon-reexecbile olsa çalışmalıydı systemd.
Stephen Kitt

3
İhtiyaçların yeniden başlatılmasının sıkıntısı , PID'nin "start_time" ı sorguladığı github.com/rpm-software-management/yum/blob/master/… adresine kadar uzanıyor; Daemon-reexec bunu güncellemezse, ihtiyaçların yeniden başlatılması "karışık" kalacaktır.
Jeff Schaller

1
İlgili herhangi bir codepath'in, özellikle RedHat dışı sistemlerde iyi test edilmiş olduğunu varsaymayın. Daemon-reexec'i çalıştırmak teknik olarak mümkün, ancak yeniden başlatmak daha güvenli.
Harald

2
@Harald, herhangi bir zamanda systemdDebian ve türevlerinde yükseltme yapan kişiler için kullanılır , bu yüzden iyi bir şekilde test edilmiştir. Aynı zamanda oldukça basittir (arayın do_reexecute).
Stephen Kitt,

1
@StephenKitt - Çalıştırmaya lsof -p1 | grep deletedçalıştığımda aşağıdaki çıktı üretildi lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. Okuma sırasında ( unix.stackexchange.com/questions/171519/… ), kök bile erişemiyor. Alternatif ne olabilir lsof -p1 | grep deleted?
motive

2

Benim durumumda daha yeni bir güncelleme yaptım systemdve herhangi bir systemctlkomut başarısız oldu:

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied

Ancak, initmanpage'e göre , aynı şeyi SIGTERMPID 1 ile çalışan cuma göndererek çalıştırabilirsiniz:

kill -TERM 1

Bu daemonu yeniden yükledi, ardından tüm systemctlkomutlar tekrar çalışmaya başladı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.