“Bir durma işi devam ediyor…” da olduğu gibi “bir durma işi” tam olarak nedir?


28

Bir kapatma komutu verildikten sonra, bazen biri böyle bir durum mesajı alır:

A stop job is running for Session 1 of user xy

ve sonra sistem bir süreliğine, ya da sonsuza kadar bağlı kalmak üzere ???

Peki tam olarak "durdurulan iş" nedir?

Ayrıca, neden bazen zaman alacağını, oldukça doğru bir şekilde ve sonsuza kadar sürecek başka zamanları tahmin ediyor?


1
Belki iş durdurulmalı ? Oturumu aslında olan işler, durduktan değil çalışan ve bu yüzden sonlandırma sinyallerine yanıt verdiklerini fırsatı yok.
Kaz

Yanıtlar:


27

systemd, "iş" sırasına göre dahili olarak çalışır. Her (biraz basitleştirerek) yapılması gereken bir işlemdir: belirli bir birimi durdurma, kontrol etme, başlatma veya yeniden başlatma .

(Örneğin) sisteme bir servis birimi başlatması talimatını verdiğinizde, bu amaca ulaşmak için hangi birimler (servis birimleri, montaj birimleri, cihaz birimleri vb.) İçin gerekli olan durdurma ve başlatma işlerinin bir listesini yapar. birim gereksinimleri ve bağımlılıkları, birim sipariş ilişkilerine göre bunları sıralar, işler ve (mümkünse) kendi çelişkilerini düzeltir ve (bu son adım başarılı olursa) sıraya yerleştirir.

Sonra sıkılmış "işleri" gerçekleştirmeye çalışır.

Xy kullanıcısının 1. Oturumunda bir durdurma işi çalışıyor

Birimin görünen adı burada Session 1 of user xy. Bu (görünen addan) bir servis birimi değil, bir oturum birimi olacaktır. Bu, sistem programı ve PAM eklentileri tarafından tutulan kullanıcı alanı oturum açma oturumu soyutlamasıdır . Bu (özünde ve teoride), kullanıcının bir yerde "giriş oturumu" olarak yürüttüğü tüm işlemlerin bir grubudur.logind

Kendisine karşı alınmış iş stop. Muhtemelen uzun zaman alıyor çünkü sistem ve insanlar oturumu kapatırken hatalı oturumu kapattı . Onlar ikincisini işe almak için eskiyi kırdılar ve buna karşılık bazı insanlar eskisini işe almak için ikincisini kırmak için sistemi değiştirdiler. Sistem adamları, gerçekten iki farklı şey olduğunu kabul etmeli.

Oturum açma oturumunuzda, görmezden geldiğiniz SIGTERMveya görmezden gelmesi çok uzun süren bir şeyiniz var SIGTERM. İronik olarak, eski bazı iş kontrol kabuklarının uzun süredir devam eden davranışıdır. Onlar bu belirli iş denetimi kabukları olduğunda Giriş oturumu liderleri sonlandırmak için doğru yolu oturumu edildiğini onlara olan kapattı onlar tüm sonlandırmak, bunun üzerine, onların ardından (iç systemd işten işe farklı bir tür) iş ve kendilerini sonlandırmak.

Aslında olan şu ki, sistemd birimin durma zaman aşımına uğrayana kadar beklemesini bekliyor SIGKILL. Bu zaman aşımı birimi başına elbette yapılandırılabilir ve asla zaman aşımına uğramadan ayarlanabilir. Bu yüzden neden potansiyel olarak farklı davranışlar görülebilir.

daha fazla okuma


1
Bu cevaba göre, unix.stackexchange.com/a/297318/224025 bu zamanı değiştirebiliriz. Sıfır saniyeye değiştirirsem güvenli olur mu (veya zarar verir mi)?
GypsyCosmonaut 23:17 '

1
Aslında, bu cevabın son paragrafı ve sizi daha fazla okumak için işaret ettiğim kullanım kılavuzu zaten zaman aşımını değiştirmekten bahsetmektedir. Bir araç aşımı 0sn ve istihdam güvenlidir başına bir soru olarak sorulması gerektiği hakkında bir soru sor nasıl bir olduğu için takip üzerinde soruya zaman aşımı değişir neden "dur işi" olduğunu ve ne bir soruya. Bunun iyi olabileceğinden şüpheleniyorum.
JdeBP

2

Bu mesajlar işleri başlatan ve durduran bir init sistem olan systemd'dendir. İşler önemli olabilir, ancak diskleri takma ve çıkarma, silme / tmp veya önyükleme sırasında ekran parlaklığını kaydetme ve geri yükleme gibi küçük görevler de yapabilir. systemctl list-unitssana fikir verir. Systemd aynı şeyi ifade etmek için "birim" ve "iş" i kullanır.

Bir iş durdurulduğunda, olduğu gibi systemctl stop ..., bir soru, başarısızlık ilan etmeden ve işin işlemlerini SIGKILLsinyalle öldürmeden önce işin tamamlanması için ne kadar süre bekleneceğidir . SIGKILLSürecin temiz bir şekilde çıkması için fırsat vermediğinden, gerekmedikçe kullanmak istemiyoruz . Bazı işlemler için birkaç saniye başarısızlık bildirmek için yeterli bir süre olabilir, bir veritabanı gibi diğer işlemler için işin düzgün bir şekilde durması için önemli bir ağ ve disk G / Ç olabilir ve bu nedenle bu birimlere temiz bir şekilde kapanmaları için birkaç dakika verebiliriz. .

Kapanırken görmekte olduğunuz şey, eşdeğerinin systemctl stop $UNIT_NAMEçalışması biraz zaman alıyor. Geçen saniyeleri ve SIGKILL verilmeden önceki maksimum bekleme süresini gösteren bir sayaç var ve kapatma işlemi ne olursa olsun devam ediyor.

Uzun bir gecikme beklemek için iyi nedenler yoksa, bu genellikle bir tür arızayı gösterir. Bu, bir DHCP sunucusundan bir Sürüme yanıt vermemeye ve bu nedenle zaman aşımına uğraması gereken Sürüm eylemine veya bir arka planın çıkmamasına neden olan bazı hatalara neden olabilir.


"Systemd" aynı birimi ifade etmek için "birim" ve "iş" i kullanır. Bunun doğru olduğunu sanmıyorum: kabaca konuşursak, bir "iş" bir "birime" bir şey yapma isteğidir. Ayrıntılar için @ JdeBP'nin cevabına bakınız.
Thomas,


0

“İşleri durdur” systemdbelirli bir “iş” in durmasını beklemektedir, örneğin, devam etmeden önce tamamlanmasını bekleyen bazı işlemler. "Durma işi çalışıyor ..." (vb.) Bir uyarı mesajı görürseniz, teknik olarak iş kuyruğunda bekleyen bir şey olduğu anlamına gelir.

Bununla birlikte, tüm sistem iş kuyruğunuzu kazmadan önce, bu uyarı mesajlarının bazen çevresel faktörlerin dolaylı bir sonucu olduğunu unutmayın (aslında, mesaj GitHub deposunda olası bir hata olarak bile belirtilir).

Örneğin: “işi durdur” ile ilgili mesajlar alıyorduk ve nedenini çözemedik… ortaya çıktı, disk neredeyse boş kaldı ve işletim sisteminin garip davranmasına neden oldu.

Sunucuyu daha büyük bir diske yükseltmek ve yeniden başlatmak onu düzeltmek ;)

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.