Python ile yazılmış init.d komut dosyaları


10

StackOverflow'dainit.d Python'da komut dosyası yazma hakkında soru soran bir soru geldi . Bir yorum, bu komut dosyalarının Python'da değil, kabukta programlanması gerektiğini belirtti. init.dPython'da komut dosyası yazıyor :

  1. Kötü. Kötü. Kötü. Bunu asla yapma.
  2. Önerilen bir uygulama değil.
  3. Tamam, uyarılarla.
  4. Eski dogma.
  5. Tamamen iyi.

Kabus senaryolarını bilmek ya da bu kuralın bazı sistemaderin kanında yazılı olup olmadığını bilmek harika olurdu.

Yanıtlar:


9

# 2 diyorum ama # 1'e çok yakın - "Kötü. Kötü. Kötü. Bunu asla yapma." Linux init betikleri için olduğu gibi standart LSB'de ve asla çıkmıyor ve "bunlar bourne kabuk betikleri" diyorken, birkaç varsayım yapıldı. Birincisi, # ile başlayan satırlar yorumdur, iyi çalışır. Daha sorunlu olan, init betiğinin /lib/lsb/init-functions"geçerli ortamda (bkz. Kabuk özel yerleşik komut noktası)" komutlarını yürütmesi gereksinimidir .

Ama daha da önemlisi, burada gerçekten karmaşık bir şey yapıyorsanız, bunu yanlış yapıyorsunuz. Başlangıç ​​komut dosyaları çok basit ve faydacı olmalıdır. Programlar değil, klasik anlamda betikler olmalıdırlar. Emmek ve herhangi bir sistem yöneticisinin Python'da güzel ve tasarlanmış bir şey yapmaktan çok hızlı bir bakışta kolayca grok yapabileceği basit bir kabuk komut dosyası yapmak daha iyidir.

Akılda tutulması gereken bir diğer husus systemd, Linux'ta Tüm Sistem Başlatmalarının Geleceği olabilir veya olmayabilir. Systemd altında başlatma, komut dosyalarından ziyade basit yapılandırma dosyaları tarafından yapılır; bu, tüm başlatmanın çeşitli standart tasarım modellerine uyması ve gerçekten de sadece bir tane seçmeniz gerektiğidir. Program, başlatma için karmaşık bir şey kullanıyorsa, init betiğinin kendisinin dışına çıkmalıdır.


1
Bu cevap ile gidiyorum. Mesele şu ki, Python gerekli değildir ve standart değildir ve bu nedenle belirsizlik ve ekstra hata noktası hata ayıklama için ekstra bir nokta oluşturabilir. Orijinal SO sorusuna atfen, bu tür komut dosyalarının cinleri başlatabileceğini, ancak asıl cinler olmamalılar.
mjhm

hatırlarsam, tüm dağıtımlar LSB'yi takip etmez. bkz. debian.
Massimo

10

Onunla ilgili bir sorun görmüyorum, eğer biliyorsanız, init.d komut dosyası çalıştırılırken Python yorumlayıcısının kullanılabilir olacağını biliyorsunuz. Bu, bana göre, çok kullanıcılı (veya "grafik konsolu") çalışma düzeyinde nispeten geç yapılan bir şeye baktığınızı gösterir.

Ancak ... Bu, Python yorumlayıcısının belirli bir sürümünün önyükleme diziniz için hayati önem taşıyabileceği ve bu, yükseltmelerde kontrol etmeniz gereken bir başka thng olduğu anlamına gelir.

Sanırım bu demek oluyor ki "3. Tamam, uyarılarla".


4
+1. Tam yazdıklarım. Buradaki tek "problemler"
LSB'ye uyduğunuzdan

3
Kullanıcı ayrı bir bölümde / usr kullanmayı seçtiyse çalışma zamanında kullanılabilir karmaşık olabilir. Python genellikle / usr içine yüklendiğinden betiğinizin / usr bağlandıktan sonra çalıştırılması önemlidir.
Zoredache

@Zoredache - Ayup. Tipik olarak, "çok kullanıcılı" RC dizisine geç kaldığınızda "gerçekleştiğini" bilirsiniz.
Vatikan

2

"3. Tamam, uyarılar", ama farklı nedenlerle katılıyorum. Solaris ile ilgili deneyimlerim, bazı iç programları için Perl'in OS kopyasına sahip olmalarıydı. Kabuk betiği, Perl'i fırlatmak için mermiden başka bir şey değildi. Başlangıç ​​komut dosyasının sh ile yazılması gerekiyor muydu? Hayır, ancak yönetici için sürdürülebilirliği artırdı. Ve init betiği, daemon --startveya gibi şeyleri daha karmaşık bir şey yapmadı daemon --stop. Bunu yaptıysanız, programınız bağlamında mantıklıysa, normal kullanıcılar aracınızı ayrıcalıksız modda başlatabilir. Ve incelik için her türlü karmaşık ortama sahip olmaları gerekmeyecekti.

Modern Linux dağıtımları, hala kullananlar bile init.d, cinleri yönetmeyi kolaylaştıran geniş bir önceden oluşturulmuş işlev koleksiyonuna sahiptir. Grafiksel önyükleme işlemleri, başlangıç ​​komut dosyalarından biri hata bildirmeye başlamadığı sürece güzel logoyu yukarıda tutmak için bu işlevleri düzenli olarak kullanır. Python kodunuz (veya başka bir dil) bu şemalarla iyi oynatılamayabilir.

Estetik veya sürdürülebilirliği umursamıyorsanız, init betiğiniz istediğiniz gibi yazılabilir. Düzgün kesip yapıştıramayan, komut satırı argümanlarını tamamen görmezden gelen birçok yöneticiyi gördüm ve sadece arka plan programını başlatıyorlar. Kapatma, durum veya yeniden başlatma yok. Olgunlaşmamıştı, ama kodları hala koştu.


1

# 1-2 arasında diyorum. LSB sizi bu şekilde yönlendirir .. ve bir Sys-Admin'den (dev rolü olmayan) iş req's sh / bash bilgisini dikte eder, python, PHP veya perl'in dev-düzeyi (hatta ışık anlayışı) DEĞİLDİR. Bu, sistem başlatma komut dosyaları için değil, LAMP yığını içindir.

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.