Saya ingin daemonizer yang dapat mengubah skrip atau perintah umum yang berubah-ubah menjadi daemon .
Ada dua kasus umum yang ingin saya tangani:
Saya memiliki skrip yang harus berjalan selamanya. Jika pernah mati (atau saat reboot), mulai ulang. Jangan biarkan ada dua salinan yang berjalan sekaligus (deteksi jika salinan sudah berjalan dan jangan luncurkan dalam kasus itu).
Saya memiliki skrip sederhana atau perintah baris perintah yang ingin terus saya jalankan berulang kali selamanya (dengan jeda singkat di antara proses). Sekali lagi, jangan izinkan dua salinan skrip untuk dijalankan sekaligus.
Tentu saja sepele untuk menulis loop "while (true)" di sekitar skrip pada kasus 2 dan kemudian menerapkan solusi untuk kasus 1, tetapi solusi yang lebih umum hanya akan menyelesaikan kasus 2 secara langsung karena itu berlaku untuk skrip dalam kasus 1 sebagai baik (Anda mungkin hanya ingin jeda yang lebih pendek atau tidak ada jeda jika skrip tidak dimaksudkan untuk mati (tentu saja jika skrip benar - benar tidak pernah mati maka jeda sebenarnya tidak masalah)).
Perhatikan bahwa solusinya tidak boleh melibatkan, katakanlah, menambahkan kode penguncian file atau rekaman PID ke skrip yang ada.
Lebih khusus lagi, saya ingin program "daemonize" yang dapat saya jalankan
% daemonize myscript arg1 arg2
atau, misalnya,
% daemonize 'echo `date` >> /tmp/times.txt'
yang akan membuat daftar tanggal bertambah ditambahkan ke times.txt. (Perhatikan bahwa jika argumen untuk daemonize adalah skrip yang berjalan selamanya seperti pada kasus 1 di atas, maka daemonize akan tetap melakukan hal yang benar, memulai ulang bila perlu.) Saya kemudian dapat meletakkan perintah seperti di atas di .login saya dan / atau cron setiap jam atau menit (tergantung seberapa khawatir saya tentang hal itu meninggal secara tidak terduga).
NB: Skrip daemonize perlu mengingat string perintah yang di-daemonisasi sehingga jika string perintah yang sama di-daemonisasi lagi, salinan kedua tidak akan diluncurkan.
Selain itu, solusi idealnya harus berfungsi pada OS X dan linux tetapi solusi untuk satu atau yang lain dipersilakan.
EDIT: Tidak apa-apa jika Anda harus memintanya dengan sudo daemonize myscript myargs
.
(Jika saya memikirkan ini semua salah atau ada solusi parsial yang cepat dan kotor, saya ingin mendengarnya juga.)
PS: Jika bermanfaat, berikut pertanyaan serupa khusus untuk python.
Dan ini jawaban untuk pertanyaan serupa memiliki apa yang tampaknya menjadi idiom yang berguna untuk mengutuk cepat-dan-kotor dari skrip yang sewenang-wenang: