İnit.d'den uptart'a kadar bir köprü var mı?


11

/Etc/init.d içinde kullanmak için mükemmel bir senaryom var. Aslında, hepsi Tanuki Java Service Wrapper ile oluşturulmuş birçoğum var.

Bana öyle geliyor ki, böyle bir kabuk betiğini bir start-up betiği olarak sarmak için basit bir şablon olabilir, ancak biraz googling bir tane ortaya koymaz.

Bir şey mi kaçırıyorum?

Yanıtlar:


9

Bunun için bir şablon gördüğümü hatırlamıyorum. Bununla birlikte, biraz ironik, teknik olarak, geriye dönük uyumluluk işi rc ve rcS sayesinde init.d betiğinizi ilk başta başlatan onun uptart.

Bir başlangıç ​​işi olarak ne varsa yeniden yazmayı düşünürdüm, ancak bazı komut dosyalarının dönüştürülmesinin zor olduğunu biliyorum, bu yüzden bazı senaryolarımda bir süre yaptığım şey:

description "xyz"
author "xyz"
start on runlevel 5
stop on runlevel [!5]

pre-start script
    # do my work here to start the service
end script

post-stop script
    # do work here to stop the service
end script

Şimdi, hizmetin niteliğine bağlı olarak, devam edip etmeme veya kendi kendini çatallama durumuna bağlı olarak, iş dosyasını eklemeniz expect forkveya taskiş dosyasına eklemeniz gerekebilir .

Sadece düşünceyi tamamlamak için, genellikle, bu tam bir uptart iş dosyası zaten var. Tüm başlangıç ​​öncesi çalışmalar yapılır, tüm temizlik yapılır, kalan tek şey genellikle kendisiyle eklenen hizmetin kendisidir:

exec service_cmd

Başlangıçta, belgeler 3,4 ve 5 çalışma seviyelerinin kullanılmadığını söylüyor. Yani, sadece çalışma seviyesi 2'yi kullanmalısınız.
djangofan

Bir süre oldu, ama eminim 5 GUI başlatıldığında sistem yukarı, en azından eskiden.
Joseph Rogers

6

Bu yüzden, yukarı yönlü işlerin bir noktasının yazılması basittir.

İnit.d komut dosyalarında defalarca tekrarlanan çok sayıda kabuk komut dosyası sihri vardır. Vaka bildirimleri, pidfile izleme, lsb yorum satırları. Bir GOOD init.d betiği bir tane okumadan nasıl yazılacağı çok açık değil.

Bunların hepsini yazma zahmetinden zaten geçtiyseniz, başka bir yorumda bahsettiğim gibi, başka bir uptart işine / etkinliğine bağımlı olmadığınız sürece bir uptart işine ihtiyacınız yoktur.

Ama gerçekten, upstart işleri gerçekten basitleştirir. Tmpdirs, ulimits veya çalışma zamanı argümanları gibi şeyler ayarlamanız gerekmedikçe, bir ön başlatma yapmanız gerekmez. Bir hizmetten sonra toparlanmadığınızdan emin olmak istemiyorsanız, bir post-stop'a ihtiyacınız olmamalıdır (servis normal çıkışta gerçekten temizleniyor olmalıdır).

Genellikle birçok seçenek içeren dev bir init.d betiği 10-15 satırlık bir başlangıç ​​işine kadar kaybolur. En karmaşık init.d komut dosyaları mantıklarının çoğunu başlatma öncesi programlara dökebilir. Anahtar orada onun işlem için ortam kurmak için sadece küçük bir kod snippet, ve start / stop / respawn / vb işleme mantık değil.

En zor kısmı ve insanların en sık yanlış yaptığı kısım, işlerine ne zaman başlayacaklarını / durduracaklarını bilmek. start on runlevel [2345]mantıklı görünüyor, ancak yerel dosya sistemi bağları gibi ağın bu noktada paralel olarak geldiği gerçeğini göz ardı ediyor. Anahtar, çalıştırmak için tam olarak ihtiyacınız olan minimum şeyleri (diğer hizmetler, dosya sistemleri, ağ vb.) Bulmaya çalışmaktır ve bunlar bittiğinde başlamaktır. Geleneksel ağ hizmetlerinin çoğu bunu yapmalıdır start on (local-filesystems and net-device-up IFACE!=lo).


3

Upstart'ın SysV tarzı init komut dosyalarıyla geriye dönük uyumluluğu koruduğunu düşündüm /etc/init.d. Başlangıç ​​komut dosyalarınızı değiştirmeden kullanabilmeniz gerekir.


Öyle ama siparişi tahmin etmek artık o kadar kolay değil. Upstart işleri rc2.d / S99mything betiğiniz çalışmaya başlamadan önce / sonra başlıyor olabilir. Dolayısıyla, bir yeniden başlatma yönetilen hizmetine bağımlı olduğunuzda, bir yeniden başlatma işine ihtiyacınız vardır.
SpamapS

2
Bir hack olarak, belirli çalışma seviyelerine adresinin init komut dosyalarını kaldırmak olabilir ve bunun yerine gibi bir dizi satır eklemek /etc/init.d/myservice startiçin /etc/rc.localdoğru sırayla. Bu, Upstart init komut dosyaları tarafından başlatılanlar da dahil olmak üzere diğer tüm hizmetlerden sonra hizmetlerinizin en son başlatılmasını sağlar.
Ryan
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.