Saya menjalankan pekerjaan setiap menit untuk mengindeks ulang konten situs saya.
Hari ini, mesin pencari mati, dan ketika saya login ada ratusan proses anak yatim yang dimulai oleh cron.
Apakah ada cara lain menggunakan beberapa jenis perangkat lunak yang ada yang akan membiarkan saya menjalankan pekerjaan setiap menit, tetapi itu tidak akan meluncurkan contoh lain jika pekerjaan itu tidak kembali (yaitu karena proses mesin pencari telah gagal)?
cron
scheduled-task
John
sumber
sumber
Jawaban:
Masalahnya sebenarnya bukan dengan cron - ini dengan pekerjaan Anda.
Anda perlu membuat pekerjaan Anda berinteraksi dengan kunci beberapa deskripsi. Cara termudah untuk melakukan ini adalah mencoba membuat direktori dan jika berhasil melanjutkan, jika tidak keluar. Ketika pekerjaan Anda selesai dan keluar, ia harus menghapus direktori yang siap untuk dijalankan berikutnya. Berikut ini skrip untuk diilustrasikan.
Jalankan ini di satu terminal kemudian sebelum 60 detik habis jalankan di terminal lain itu akan keluar dengan status 1. Setelah proses pertama keluar Anda dapat menjalankannya dari terminal kedua ...
EDIT:
Ketika saya baru saja belajar tentang kawanan domba, saya pikir saya akan memperbarui jawaban ini. flock (1) mungkin lebih mudah digunakan. Dalam hal ini
flock -n
akan tampak tepat misalnyaAkan menjalankan pekerjaan Anda setiap menit tetapi akan gagal jika kawanan tidak dapat memperoleh kunci pada file.
sumber
Salah satu caranya adalah membuat skrip reindex Anda membuat file kunci sehingga dapat memeriksa untuk melihat apakah sudah ada instance skrip yang sedang berjalan. Anda juga dapat menambahkan beberapa penanganan pengecualian untuk melihat apakah mesin pencari sudah aktif dan berjalan.
Alternatif yang lebih terlibat adalah dengan menggunakan semacam tugas antrian seperti Resque dan Resque-scheduler:
https://github.com/blog/542-introducing-resque
https://github.com/bvandenbos/resque-scheduler#readme
Ada juga Qu dan Sidekiq:
https://github.com/bkeepers/qu
https://github.com/mperham/sidekiq
Ya, itu saja yang berorientasi pada Ruby, tetapi Anda dapat mencari "hal-hal seperti resque" dalam bahasa pilihan Anda.
sumber
Cara lain untuk mengatur ini dengan cepat adalah membuat skrip shell mulai ketika mesin dinyalakan (cron dapat melakukan ini dengan '
@reboot /path/to/my/script.sh
',. Kemudian restart cron untuk memulai itu) dengan sesuatu seperti ini di dalamnya.Script terus berjalan, dan Anda baru memulai satu - itu berapa banyak yang bisa berjalan sekaligus - tidak lebih dari itu. Beberapa kecerdasan di sana juga dapat memeriksa apakah pengindeks sedang berjalan, dan jika tidak, mulai ulang, atau coba perbaiki / beri tahu seseorang tentang masalah tersebut.
sumber
Alih-alih menggunakan cron untuk ini, saya akan membangun pekerjaan Anda lebih sebagai layanan yang berjalan dalam satu lingkaran dan tidur selama 60 detik sebagai langkah terakhir, atau mungkin tidur lebih sering untuk interval yang lebih kecil di berbagai titik selama proses untuk membantu menyebarkan beban lebih merata.
sumber