Başlangıçta daemontools veya daemonize gibi harici araçlar kullanmadan bir daemon olarak çalıştırmak istediğim bir kabuk komut dosyası yazıyorum .
Linux Daemon Yazma NASIL
Göre Linux Daemon Yazma NASIL , bir düzgün cini aşağıdaki özelliklere sahiptir:
- Üst işlemden çatallar
- kapanır tüm dosya tanımlayıcıları (yani
stdin
,stdout
,stderr
) - yazma için günlükleri açar (yapılandırılmışsa)
- değişikliği çalışma dizini (genellikle kalıcıdır birine
/
) - dosya modu maskesini sıfırlar (umask)
- benzersiz bir Oturum Kimliği (SID) oluşturur
Daemonize Giriş
Artalanda Giriş söylemektedir olması da tipik bir cin:
- (varsa) kontrol terminalinden ayrılır ve tüm terminal sinyallerini yoksayar
- süreç grubundan ayrılıyor
- kolları
SIGCLD
Nasıl bütün bu yapacağını sh
, dash
ya da bash
tek ortak Linux araçları ile komut?
Debian bizim birincil odak noktamız olmasına rağmen, komut dosyası ek yazılım olmadan olabildiğince çok dağıtımda çalışabilmelidir .
NOT: StackExchange ağında nohup
veya kullanımını öneren çok sayıda yanıt olduğunu biliyorum setsid
, ancak bu yöntemlerin hiçbiri yukarıdaki tüm gereksinimleri ele almaz.
DÜZENLEME: Daemon (7) manpage eski tarzı arasında bazı farklılıklar var gibi görünmektedir rağmen ayrıca, bazı önemli noktaları verir SysV
cinleri ve daha yeni systemd
olanlar. Çeşitli dağıtımlarla uyumluluk önemli olduğundan, lütfen cevabın herhangi bir farklılığı netleştirdiğinden emin olun.
daemon
ve bu diğer şeyler çalışan içindir keyfi olarak çalıştırmak için hiçbir hükmü kabuk komut dosyalarını bir daemon. Yazar olduğunuzdan, bu komut dosyasının nasıl yazıldığını tamamen kontrol ettiğiniz için, bunu sadece bir systemd unitfile veya rc.d komut dosyasından başlatılabilmesini sağlayın. Sen ki "Doğru" belirtmek!