deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

systemd-inhibit açıklaması: uzun Linux işlerini suspend ve reboot sırasında ayakta tutmak

dev.to rehberi systemd-logind'in inhibitor kilitlerini anlatıyor: block, delay ve block-weak modları, idle, sleep ve shutdown için kilit türleri ve yedekleme ile timer'ları koruma desenleri.

systemd-inhibit açıklaması: uzun Linux işlerini suspend ve reboot sırasında ayakta tutmak

Sorun

Saatlerce sürecek bir rsync, dizüstü bilgisayar suspend olduğundan yarıda kalıyor. Bir dağıtım yükseltmesi paketleri açarken reboot devreye giriyor.IdleAction=suspend ile yapılandırılmış başsız bir makine, yedeklemenin ortasında tüm oturumların boşta olduğuna karar veriyor. dev.to'daki bir rehber bunların uygulama hataları olmadığını savunuyor: bunlar, systemd-logind'in uyku, kapatma, boşta kalma yönetimi ve tuş olaylarını geçici olarak ertelemek için sunduğu mekanizma olan inhibitor kilidini hiç almamış uzun süreli işlerdir.

Kilit nasıl çalışır

Temeldeki API, açık bir dosya tanıtıcısı döndüren logind'e yapılan tek bir D-Bus çağrısıdır: Inhibit(what, who, why, mode). Kilidin ömrü bu tanıtıcıya bağlıdır: onu tutan süreç sonlandığında çekirdek dosyayı kapatır ve kilit ortadan kalkar. dev.to rehberine göre bu tasarım bayat kilit veritabanını ya da unutulmuş bir unlock'ı imkânsız kılar — çöken işler inhibitor'larını otomatik olarak bırakır.

systemd-inhibit, bu çağrının üzerine ince bir komut satırı sarmalayıcısıdır. Kilidi alır, komutunuzu çalıştırır ve komut bitene kadar tanıtıcıyı elinde tutar; böylece neredeyse her işi, üzerinde değişiklik yapmadan koruyabilirsiniz.

Neler engellenebilir

Üç üst düzey kilit türü yaygın hata modlarını kapsar:

  • shutdown, logind üzerinden geçen kapatma, reboot, halt ve kexec isteklerini engeller
  • sleep, suspend, hibernate ve hibrit varyantları kapsar
  • idle, IdleAction= yolu gibi otomatik boşta kalma davranışını kontrol eder

--what atlanırsa üçü birden alınır (idle:sleep:shutdown); rehbere göre bu, bir işin kesinlikle bölünmemesi gerektiği her durumda doğru varsayılandır.

İkinci aile — handle-power-key, handle-suspend-key, handle-lid-switch ve benzerleri — yalnızca logind'in yerleşik davranışını kapatır ki bir masaüstü ortamı devralabilsin. Bunlar birinin root shell'de systemctl suspend yazmasını engellemez. Rehber ayrıca dizüstü bilgisayarlara özgü bir tuhaflığa dikkat çeker: logind.conf içinde LidSwitchIgnoreInhibited= varsayılan olarak yes'tir; dolayısıyla tek başına üst düzey bir sleep kilidi, bu ayar değiştirilmeden veya düşük düzey kapak kilidi alınmadan kapak kaynaklı suspend'i engellemeyebilir.

Mod seçimi

Varsayılan olan block, kilit bırakılana kadar işlemin başarısız olmasını sağlar; ancak ayrıcalıklı kullanıcılar yine de geçersiz kılabilir. delay, işlemin en fazla InhibitDelayMaxSec= (varsayılan beş saniye) beklemesine izin verir, sonra işlemin yine de devam eder ve yalnızca sleep ile shutdown için geçerlidir — suspend öncesinde ekranı kilitlemek gibi durum temizleme kancaları için vardır, saatler sürecek bir yedeklemeyi korumak için değil. block-weak, block gibi davranır ama root ve kilit sahibinin kendi istekleri tarafından sessizce atlanır. dev.to yazarı, inhibitor'ların yöneticiler için kaçış kapıları bulunan işbirlikçi bir protokol olduğunu, root'a karşı bir güvenlik sınırı olmadığını açıkça belirtiyor.

Pratik desenler

Mevcut kilit sahiplerini systemd-inhibit --list ile (yeni sürümler -- kabul eder) inceleyin ya da logind'e doğrudan D-Bus üzerinden busctl ile sorgu atın; BlockInhibited ve DelayInhibited özellikleri etkin kilit türlerinin iki nokta ile birleşmiş kümesini verir; rehber bunu izleme probları için öneriyor.

Temel desen, işi doğrudan sarmalamaktır:

systemd-inhibit --what=idle:sleep:shutdown
--who=backup --why="Nightly rsync of /srv" --mode=block
rsync -aHAX /srv/ /mnt/backup/srv/

Rehber ayrıca mümkün olduğunda kilidi daraltmayı öneriyor: bir veritabanı dökümü yalnızca shutdown:idle alabilirken, gerçek düşmanın suspend olduğu bir disk imajı yazma işlemi sleep:idle alır. En geniş kilidi süresiz tutmak, dizüstü bilgisayarların hiç uyumamasına ve pilin bitmesine yol açar. Gece boyu süren işler için dayanıklı desen, ExecStart= içinde yedekleme betiğinin etrafında systemd-inhibit çağıran, açıklayıcı --who ve --why etiketlerine sahip (bunlar --list çıktısında ve masaüstü iletişim kutularında görünür), bir timer tarafından tetiklenen oneshot bir servistir.

Neden önemli

Boşta kalma ve uyku politikaları etkileşimli dizüstü bilgisayarlar için ayarlanmıştır; oysa yedeklemeler, göçler ve yükseltmeler bir kahve molasından uzun süren toplu işlerdir. Inhibitor kilitleri bu ikisini uzlaştırmanın onaylanmış yoludur ve güvenli biçimde başarısız olurlar: çöken bir iş, çekirdek tanıtıcıyı kapattığı için kilidini bırakır. Bunlar yedeklemelerin, fencing'in veya paket yöneticisi kilitlerinin yerine geçmez — rehberin belirttiği gibi yalnızca logind'in kendi sleep, idle ve shutdown eylemlerini ertelerler — ama suspend olan bir dizüstü bilgisayarın işinizi yarıda kesmesini durdurmak için gereken tam olarak budur.

  • #systemd
  • #linux
  • #sysadmin
  • #command-line

İlgili yazılar