Import komutunun bir hizmetten geçerken başarısız olmasına neden olan nedir?


1

System V hizmetimiz, import komutunu çalıştıran bir arka plan programı çalıştırır. Hizmetimizi sudo service myservicebaşlangıçta çalıştırmak hizmeti başlatmak gibi görünüyor ancak ekran görüntüsü alınması söz konusu olduğunda içe aktarma çalışmıyor. Bir ekran görüntüsünü almanın tek yolu başlangıç ​​ile hizmete /etc/init.d/myservicebaşlamak. Bundan sonra, import komutuyla ekran görüntüsünü alabiliriz.

Herhangi bir fikir?

Yanıtlar:


1

GNU / Linux dağılımı gibi “çevreye bağlı” dıĢında sorunuza doğrudan bir cevap yoktur.

Yarı ilgili ayrıntılara girmeden önce, neden sudo service import-image-serviceişe yaramadığını, import komutunun ekran görüntüsünü nereye ve nasıl alacağınızı bilmek için çevre hakkında yeterli bilgiye sahip olmadığı için bilmelisiniz. Adam sudo okumak şöyle:

 DESCRIPTION
   sudo allows a permitted user to execute a command as the superuser or
   another user, as specified by the security policy.

Bu biraz şifreli ve bu "güvenlik politikası" nı öğrenmek eğlenceli, ama belki de en sevdiğiniz etkinliklerden biri değil. Size söyleyeyim, bu , sudo run ile yalıtılmış bir ortamda çalıştırılan komutlar anlamına geliyor .

Buna karşılık, /etc/init.d/myserviceçünkü ortam-kurulum-politikası, bazı aklı başında olan varsayılanları yapılandırmak için adımlar atıyor export DISPLAY=:0.0. Bir hizmetin bir X sunucusunun varlığı hakkında doğru şekilde nasıl bilgilendirileceğini bulmak için kullanılan dağıtımın karmaşıklıklarını araştırmanız gerekecektir. Bu arada, deneyebilirsinizsudo -E service myservice

  -E      The -E (preserve environment) option indicates to the secu‐
       rity policy that the user wishes to preserve their existing
       environment variables.  The security policy may return an
       error if the -E option is specified and the user does not
       have permission to preserve the environment.

Bazı arka plan

Uyarı: Bu bölüm yarı gerçekli ve tarihsel önyargılı

GNU / Linux sistemindeki servisler bir dağıtımdan diğerine keyfi bir şekilde davranır. Çoğunlukla, hizmet çalıştırılmadan önce ortam kurulumunda fark vardır . Bu, en önemlisi olan birkaç faktöre bağlıdır:

  • init sistemi
    • düz Sistem V init + posix kabuğu (Slackware, Debian)
    • OpenRC (Gentoo)
    • Başlangıcı (Ubuntu)
    • systemd (birçok yeni dağıtım)
  • çevre-kurulum-politikasını dağıtır *
  • belirli init betiğinin ayrıntıları

Debian, Slackware ve Gentoo (OpenRC), /etc/init.d/ hizmetlerinin isteğe bağlı olarak / etc / default / servicename, /etc/conf.d/servicename ve benzerlerinden ek bilgi alan bağımsız komut dosyaları olduğu düşünülen benzer bir yaklaşım kullanır . Betikler, / lib / lsb / init-functions veya /lib64/rc/sh/functions.sh gibi dağıtıma özgü init işlevine dayanabilir veya güvenmeyebilir. Bu ek kabuk kütüphaneleri, ek dağıtıma özgü kaynaklardan bilgi alabilir (ortamı düzenler).

Ubuntu (Upstart) ve systemd, her hizmetin bir konfigürasyon dosyasına sahip olduğu ve init sisteminin tüm sihirleri yaptığı "tamamen" farklı bir yaklaşıma sahiptir.

Neler olup bittiğini tam olarak anlamak için, init sistemini ve kullanılan dağıtımın tuhaflıklarını okumak ve anlamak gerekir.

* Ortam değişkenlerini başlatma ve bir servisi başlatma işlemi.


importKomutu çalıştırarak şimdi çalıştısudo -u <user> import..
The_Cute_Hedgehog

0

Bu çok açık bir şekilde Linux eski Sistem V kılavuz sayfasına açıklanmıştır serviceiçinde ilk cümleden :

hizmeti bir System V init komut dosyasını olabildiğince öngörülebilir bir ortamda çalıştırır, ortam değişkenlerinin çoğunu kaldırır ve geçerli çalışma dizini / olarak ayarlanır.

imageKomutun X sunucunuzu nerede bulacağını bildiğini düşünüyorsunuz ? Bu var DISPLAYtabii ortam değişkeni.

Hizmetlerin terminalleri, DISPLAYçevre değişkenlerini vb. Kontrol eden etkileşimli bir giriş ortamında çalıştığı fikrine güvenmeyin . Onlar yapmıyor. Bu varsayımlara dayanan bir hizmet tasarladıysanız, yanlış tasarladınız ve şimdi sizin için çalışmayacak bir şey tasarladınız, çalışacak olsa bile , farklı bir init sistemi kullanmanız durumunda systemd, upstart, nosh, runit ve benzeri, bunların hepsi bir servis ortaya çıkarıldığında / indirildiğinde etkileşimli bir kabuğun çevre değişkenlerinin (ve diğer işlem durumlarının) keyfi değerlerinden etkilenmemesini sağlar.


Onun (homebrew) sistemi V init betiği ekran görüntüsü almayı başardı. sudo olmadı. Soruyu okuyun. Çevre sızdırılmış demektir . Bilerek veya değil. Man sayfaları geneldir ve tek bir işletim sisteminin ve hatta komut dosyasının neler yapabileceği hakkında hiçbir şey söylemez.
Ярослав Рахматуллин

Tam tersine, sen açıklıyor bu cevabı, okumalı nedensudo ortam yoktu oldu komut işe yaramadı değil sızıntı ve tasarlanmış ve belgelenmiş olarak işletilen sistem.
JdeBP
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.