“Servis yeniden başlatma” ve “Servis yeniden yükleme” arasındaki fark nedir


74

Ben arasındaki farkı anlamaya çalışıyorum service restart [someservice]ve service reload [someservice]. "Yeniden Başlat" hizmetini yeniden başlatırken, "yeniden yükle" yapılandırmayı yeniden yüklüyor, ancak belirli bir bağlamda kullanmam gerektiğini belirlemek için bunun pratik anlamını yeterince anlamıyorum.

Örnek: PostgreSQL'i kurmak için okuduğum çoğu rehber, derhal uzak bağlantılara izin vermek için postgresql.conf ve pg_hba.conf dosyalarını düzenlediğimde, sorun çıkarmam gerektiğini söylüyor sudo service postgresql restart. Ancak, yukarıdaki açıklamaya göre hangisinin kullanılacağını tahmin ediyor olsaydım, "yeniden yükle" yi seçerdim.

Önemli olması durumunda, Ubuntu 11.10'dayım - ancak mümkün olduğunca genel bir açıklama yapmayı umuyorum.


2
Birkaç yıl önce, birkaç bin kullanıcılı sunucuyu işletiyordum. Apache'yi yeniden başlatmak ne sebeple olursa olsun hızlı değildi, apache'nin yeniden başlatılması (nedenler) yaklaşık 3 dakika sürecek. Her neyse, sunucu 3 dakika kapalı kalsaydı patronum yaklaşık 800 telefon görüşmesi alacaktı. Servis yeniden yüklendiğinde, 0 telefon görüşmesi. Bu fark.
J0

Yanıtlar:


41

Söylediklerin doğru, reloadhizmete yapılandırma dosyalarını yeniden yüklemesini söyler. Bu, yapılandırmayı yeniden yüklemenin yeterli olması gerektiği anlamına gelir; ancak, "kurala uymayan" veya yapılandırma dosyalarını yeniden yüklemeyecek belirli hizmetler olabilir. Bu nedenle muhtemelen daha güvende olursunuz restart. Şahsen kullanmıyorum postgresql, bu yüzden bilmiyorum.


1
Bu arada, varreload-or-restart
Suuuehgi

PostgreSQL için, /etc/postgresql/version/main/postgresql.conf dosyasındaki değişiklikleri yeniden yükleyerek uygulayabilirsiniz. Pg_hba.conf dosyasına değişiklik yapmak yeniden başlatma gerektirir.
Aidan Melen

63
  • restart = durdur + başlat
  • yeniden yükle = çalışmaya devam et + yapılandırma dosyalarını yeniden oku.

8

Tüm servisler desteklemez reload. Bunu yapanlar için, genellikle yeniden başlatmanın yapılması tercih edilir (yani yeniden yükleme işlemi daha az veya hiç durma süresine neden olmaz).

Debian Policy Manual , her /etc/init.d/betiğin bir force-reloadişlemi desteklemesi gerektiğini belirtir ; reloadbu, hizmetin destekleyip desteklemediğini ve restarthizmetin yeniden yüklenmeyi desteklememesi anlamına gelir .

Bunun nasıl modern Ubuntu başlangıç ​​dünyasına dönüştüğünden emin değilim.


1
Debian Politika El Kitabı gerçekten yararlı bir bağlantıydı, teşekkürler.
Bir yama değil,

1
çoğu destek yeniden yükleme, sistem hizmeti aracılığıyla olmasa da, /etc/init.d/SomeProgram yeniden yüklemesini düşündüm
j0h

4

عبد النور التومي genişletmek için systemd deneyimim ile cevap.

Ne zaman bir işlem başlatılırsa sistemd'de sistemd bağlamında çalıştırılır, bunun en açık örneği birim dosyasında tanımlanan ortam değişkenleridir.

Bu yüzden bir systemctl reload [someservice]sinyal gönderdiğinizde, destekleniyorsa, zarafetle yeniden yüklemek için servise bir sinyal gönderir. Aksi takdirde, işlem sinyali kolayca görmezden gelir. Bu olsa yapılandırılabilir.

İncelikle ne demek istiyorum? yeni işçileri yeni yapılandırma veya kodla başlatmak ve eski işçileri varsa mevcut istekleri yerine getirmelerini durdurmak için.

Ve bunu yaparsanız systemctl restart [someservice], servise durmasını söylemeyi, mevcut sistem bağlamını imha etmeyi, yeni bir tane oluşturmayı ve servisi tekrar çalıştırmasını söyler. Bu, örneğin ortam değişkenlerini sistem bağlamında yeniden yüklemek veya yeniden yükleme desteklenmiyorsa anlamlıdır.

Umarım bu biraz açıklığa kavuşur ve eğer bir konuda yanılmıyorsam, lütfen bana bildirin.


0

şu anda bir servisin tekme atması gerekiyorsa (örneğin, bir yapılandırma dosyası değiştirilmişse) servisi bildirebilirsiniz, ancak bu yeniden başlatmaya neden olur. Hizmet zaten çalışıyorsa bir yeniden yükleme yapılması iyi olurdu (her ne kadar bazı dosyalar için yeniden başlatmalar gerektiren bazı hizmetler olması gerekiyorsa da, diğerleri için yeniden yükler).

Aklıma gelen en karmaşık örnek Apache gibi bir şey. Normalde sadece yeniden yüklemesini isteyebilirsiniz, ancak bazen bunun yerine yeniden başlatma isteğinde bulunmanız gerekir (örneğin modüller ekler / çıkarırsanız).


0

postgres, yeniden yükleme ve yeniden başlatma arasındaki büyük farklara iyi bir örnektir, çünkü daha sonra tüm veritabanı istemcilerinin bağlantısını kesmek zorunda kalır.

Bağlantıların geri çekilmemesi gerektiğinde, servisi ilk önce bir "--force" olmadan pg_ctlcluster kullanarak durdurabilirsiniz .

/ etc/postgres/{version < // {dbname < // postgresql.conf adresinde ve http://www.postgresql.org/docs/manuals/ adresinde her parametrenin "Bu parametre yalnızca sunucu başlangıcında ayarlanabilir" şeklinde bir ifadeye sahiptir. "

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.