Rastgele, genel bir komut dosyasını veya komutu bir arka plan programına dönüştürebilen bir daemonizer istiyorum .
Ele almak istediğim iki yaygın durum var:
Sonsuza kadar çalışması gereken bir senaryom var. Ölürse (veya yeniden başlatıldığında), yeniden başlatın. Aynı anda iki kopya çalışmasına izin vermeyin (bir kopyanın zaten çalışıp çalışmadığını tespit edin ve bu durumda başlatmayın).
Sonsuza kadar tekrar tekrar yürütmek istediğim (çalıştırmalar arasında kısa bir duraklama ile) basit bir komut dosyam veya komut satırı komutum var. Yine, komut dosyasının iki kopyasının aynı anda çalışmasına izin vermeyin.
Elbette 2. durumda komut dosyası etrafında bir "while (doğru)" döngüsü yazmak ve ardından 1. durum için bir çözüm uygulamak önemsizdir, ancak daha genel bir çözüm 2. durumu doğrudan çözecektir çünkü bu durum 1'deki komut dosyası için geçerli kuyu (script gerçekten eğer komut şimdiye elbette (ölmek üzere tasarlanmamıştır eğer sadece kısa veya hiç duraklama isteyebilir gelmez sonra asla ölmez duraklama yok aslında olsun)).
Çözümün, örneğin mevcut komut dosyalarına dosya kilitleme kodu veya PID kaydı eklemeyi içermemesi gerektiğini unutmayın.
Daha spesifik olarak, çalıştırabileceğim bir "daemonize" programı istiyorum
% daemonize myscript arg1 arg2
veya örneğin,
% daemonize 'echo `date` >> /tmp/times.txt'
bu, times.txt dosyasına eklenen artan bir tarih listesi tutacaktır. (Daemonize edilecek argüman (lar) yukarıdaki 1. durumda olduğu gibi sonsuza kadar çalışan bir betik ise, o zaman daemonize yine de doğru olanı yapacak ve gerektiğinde yeniden başlatacaktır.) O zaman yukarıdaki gibi bir komutu .login dosyama koyabilirim. ve / veya saat başı veya dakikası (beklenmedik bir şekilde ölmesi konusunda ne kadar endişelendiğime bağlı olarak).
Not: daemonize betiğinin, arka planda çalıştığı komut dizesini hatırlaması gerekir, böylece aynı komut dizesi yeniden daemonize edilirse, ikinci bir kopya başlatmaz.
Ayrıca, çözüm ideal olarak hem OS X hem de linux üzerinde çalışmalıdır, ancak biri veya diğeri için çözümler memnuniyetle karşılanır.
DÜZENLEME: ile çağırmanız gerekiyorsa sorun değil sudo daemonize myscript myargs
.
(Bunun tamamen yanlış olduğunu düşünüyorsam veya hızlı ve kirli kısmi çözümler varsa, bunu da duymak isterim.)
Not: Yararlı olması durumunda, işte python'a özgü benzer bir soru.
Ve benzer bir soruya verilen bu yanıt, keyfi bir yazıyı hızlıca ve kirli bir şekilde şeytanlaştırmak için yararlı bir deyim gibi görünen şeyi içerir: