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, dashya da bashtek 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 nohupveya 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 SysVcinleri ve daha yeni systemdolanlar. Çeşitli dağıtımlarla uyumluluk önemli olduğundan, lütfen cevabın herhangi bir farklılığı netleştirdiğinden emin olun.
daemonve 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!