GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Skrip Pembungkus Cron

Tutorial ini dimaksudkan untuk melakukan dua hal:untuk memperluas artikel Pemecahan Masalah Cron; dan untuk memberikan gambaran umum tentang konsep skrip sederhana yang menggunakan pembuatan file sebagai tanda untuk menandakan sesuatu sedang berjalan. Ini terutama berguna ketika Anda perlu menjalankan sesuatu secara terus-menerus, tetapi tidak lebih dari satu salinan pada satu waktu. Anda dapat membuat file sebagai tanda untuk memeriksa apakah pekerjaan sudah berjalan, , dan sebaliknya, memeriksa tanda itu sebelum mengambil tindakan lebih lanjut.

Aplikasi langsung dari ini adalah ketika Anda memiliki tugas cron yang berjalan setiap menit, atau setiap beberapa menit. Dengan cron yang berulang dengan cepat, jika pekerjaan sebelumnya memakan waktu lebih lama dari waktu yang dijadwalkan, tugas ini dapat menumpuk sehingga menyebabkan beban di server, atau memperburuk masalah lainnya. Untuk menghindari ini, skrip sederhana dapat diatur di crontab (sebagai pengganti tugas cron yang dimaksud). Saat cron dijalankan, ia hanya menjalankan tugas sebenarnya jika tidak ada proses yang bersaing yang sudah berjalan.

Mengapa Menggunakan Pembungkus Cron?

Pembungkus cron digunakan ketika Anda memiliki tugas cron yang perlu dijalankan secara berurutan tetapi tidak perlu menginjak dirinya sendiri. Ini bagus untuk tugas yang ingin Anda atur agar terus berjalan. Pekerjaan yang harus dijalankan di mana saja antara setiap menit dan setiap lima menit harus menggunakan pembungkus seperti ini.

Jika Anda tidak menggunakan pembungkus pada tugas cron yang berjalan terlalu sering, Anda bisa menjalankan beberapa tugas secara bersamaan dengan mencoba melakukan hal yang sama. Tugas-tugas yang bersaing ini memperlambat seluruh pekerjaan. “Tumpukan cron job” ini bahkan bisa sangat tidak terkendali sehingga membebani server dan menyebabkan server berhenti merespons secara normal.

Apa itu Pembungkus Cron?

Alasan mengapa ini disebut pembungkus cron adalah karena ini adalah skrip yang membungkus pekerjaan cron, dan memeriksa apakah contoh lain dari cron sudah berjalan. Jika ada salinan lain yang berjalan, pembungkus akan membuat cron melewati proses ini, dan menunggu hingga proses berikutnya untuk memeriksa kembali. Ada beberapa cara agar cron wrapper tidak tumpang tindih.

Metode Pemeriksaan Proses

Salah satu caranya adalah dengan memeriksa semua proses yang berjalan untuk pengguna dan memeriksa ulang bahwa belum ada proses lain dengan nama atau atribut yang sama dengan yang ingin Anda jalankan. Beginilah cara kerja file cron.sh Magento, ia memeriksa contoh lain dari cron.php yang dijalankan sebagai pengguna, dan jika ada yang berjalan, ia akan keluar. Ini bisa jadi rumit untuk dilakukan dengan andal, jadi kami tidak menyarankan Anda untuk memulai.

Metode File Kunci

Metode langsung adalah dengan menggunakan apa yang disebut lockfile. Pembungkus cron memeriksa apakah file kunci (file apa pun dengan nama/lokasi tertentu) ada di awal proses. Jika file kunci tidak ada, skrip akan membuat file itu dan melanjutkan. Pembuatan file kunci menandakan dimulainya tugas cron. Saat tugas cron menyelesaikan skrip pembungkus, lalu hapus file kunci.

Selama lockfile ada, pembungkus baru tidak akan menjalankan sisa pekerjaan cron saat yang lain sedang berjalan. Setelah proses pertama selesai dan kunci dilepas, pembungkus lain akan dapat membuat file kunci baru lagi dan memproses secara normal.

Contoh Skrip Pembungkus

Untuk memulai, kami ingin membuat skrip bash sederhana. Di dalam file, kami menyatakan skrip yang akan ditafsirkan oleh program /bin/bash

#!/bin/bash

Kemudian kita ingin menentukan nama dan lokasi dari file kunci yang akan kita gunakan sebagai bendera kita.

# Set lockfile name and location
lockfile="~/tmp/cronwrapper.lock"

Selanjutnya, skrip perlu memeriksa apakah file kunci itu ada. Jika memang ada, maka salinan skrip lain sudah berjalan, dan kita harus keluar dari skrip.

# Check if the lockfile exists
if [[ -f $lockfile ]]; then
# If the lockfile exists quit
exit;

Jika tidak, jika file kunci tidak ada, maka kita harus membuat file kunci baru untuk menandakan bahwa kita melanjutkan skrip lainnya. Membuat file kunci juga memberi tahu salinan apa pun di masa mendatang yang mungkin dijalankan untuk ditunda hingga file kunci dihapus. Kami juga ingin menyertakan pekerjaan sebenarnya yang akan dijalankan, apakah itu panggilan ke URL melalui web, menjalankan file PHP di baris perintah, atau apa pun.

# If the lockfile is missing continue
else
# Create the lockfile
touch $lockfile
# Insert cron task here/code>

Setelah pekerjaan yang dimaksud dijalankan dan selesai, kami ingin membersihkan file kunci kami, sehingga proses berikutnya dari tugas cron mengetahui bahwa proses terakhir telah selesai dan semuanya siap untuk dijalankan kembali.

# Cleanup the lockfile
rm -f $lockfile
fi

Pada contoh di atas, akan lebih mudah untuk mendefinisikan file kunci sebagai variabel ($lockfile) sehingga dapat direferensikan dengan mudah nanti. Juga jika Anda ingin mengubah lokasi, Anda hanya perlu mengubahnya satu tempat di skrip.

Contoh ini juga menggunakan "~" di jalur ke file kunci sebagai pintasan. Ini memberitahu shell untuk mengasumsikan direktori home pengguna. Dengan demikian, path lengkapnya akan terlihat seperti ini:/home/username/tmp/cron.lock.

Namun, dengan menggunakan "~" Anda dapat menggunakan salinan skrip yang sama untuk banyak pengguna di server yang sama, dan tidak perlu mengubah jalur lengkap untuk setiap pengguna. Shell akan secara otomatis menggunakan direktori home untuk setiap pengguna ketika skrip wrapper dijalankan.

Menggabungkan Semuanya (cronwrapper.sh)

Anda dapat menyalin dan menempelkan yang berikut ini ke editor teks pilihan Anda di server Anda. Anda dapat memberi nama apa pun yang Anda inginkan, tetapi ini adalah semua bagian yang disatukan.

#!/bin/bash
lockfile="~/tmp/cronwrapper.lock"
if [[ -f $lockfile ]]; then
exit;
else
touch $lockfile
# Insert cron task here
rm -f $lockfile
fi

Ini adalah contoh yang sangat sederhana dan dapat dikembangkan lebih jauh. Idealnya, Anda dapat menambahkan tanda centang untuk mengabaikan file kunci yang lebih lama dari satu jam dan tetap menjalankan instance cron job baru. Ini akan menjelaskan pekerjaan yang terganggu yang gagal dibersihkan dengan sendirinya. Ekstensi lain mungkin untuk mengonfirmasi bahwa pekerjaan sebelumnya diselesaikan dengan bersih. Atau saran lain, akan memeriksa kesalahan dari pekerjaan cron yang dijalankan dan membuat keputusan atau mengirim peringatan berdasarkan kesalahan itu. Dunia adalah tiram Anda dalam hal pembungkus cron! Lihat server VPS Liquid Web kami, agar tugas seperti ini berjalan dengan lancar.


Linux
  1. Cara Membuat Script Startup menggunakan Crontab di Lubuntu Linux

  2. Menggunakan Notify-send Dengan Cron?

  3. Jadwalkan Skrip Apt-get Menggunakan Cron?

  1. Mengirim email HTML menggunakan skrip shell

  2. mengotomatiskan sesi telnet menggunakan skrip bash

  3. Menggunakan pekerjaan CRON untuk mengunjungi url?

  1. Hapus file log menggunakan tugas cron

  2. Dapatkan alamat MAC menggunakan skrip shell

  3. Transfer file menggunakan lftp dalam skrip bash