GNU/Linux >> Belajar Linux >  >> Linux

Cara Terbaik Untuk Memastikan Bahwa Skrip Dijalankan Sekali Periode?

Saya memerlukan skrip tertentu untuk dijalankan sebulan sekali (orang lain yang melihat pertanyaan ini mungkin perlu menjalankannya sekali sehari/minggu/tahun/5-hari, dll).

Saya tahu saya dapat menggunakan cron untuk melakukannya dengan:

0 0 1 * * ./script.sh

Tetapi bagaimana jika mesin sedang offline selama interval tersebut (mati pada tanggal 1 bulan tertentu sebagai contoh).

Apakah ada yang elegan solusi untuk ini? Atau Apakah saya harus menyertakan sub-rutin dalam skrip itu untuk menetapkan I've-run-this-month-already nilai, dan kemudian skrip lain dijalankan setiap hari dalam sebulan (atau saat boot) untuk memeriksa nilai itu?

Pembaruan:

Saya perlu skrip saya untuk dijalankan sebulan sekali di awal bulan. Saat menulis skrip untuk menyelesaikan beberapa hal, saya membuat potongan kode di bawah ini. Saya hanya meletakkannya di sini jika seseorang menganggapnya berguna setelah menemukan pertanyaan ini.

# CHECK FOR THE OLD_MONTH FILE
if [ ! -e /usr/local/bin/system/old_month ]; then
        # CREATE IT IF IT DOESN'T EXIST WITH THIS MONTHS DATE
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month
fi

# CREATE A NEW FILE EVERY TIME THIS SCRIPT IS RUN WITH THIS MONTHS DATE
echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/this_month

# CHECK IF OLD_MONTH AND THIS_MONTH ARE NOT THE SAME
if ! cmp /usr/local/bin/system/this_month /usr/local/bin/system/old_month > /dev/null 2>&1 ;
then
        # RUN YOUR RELEVANT CODE HERE #
        echo `date` | awk '{print $2,$6}' > /usr/local/bin/system/old_month     # UPDATE THE VALUE IN OLD_MONTH SO THAT THEY WILL MATCH NEXT TIME
fi

Jawaban yang Diterima:

Anda dapat menggunakan Anacron untuk ini, ini dirancang untuk menjalankan pekerjaan pada interval tertentu tanpa mengasumsikan bahwa sistem menyala terus menerus. Jika pekerjaan seharusnya dijalankan setiap bulan, Anacron akan memeriksa apakah pekerjaan itu telah berjalan di bulan sebelumnya, dan menjalankannya jika belum (dan ingat bahwa pekerjaan itu tidak perlu dijalankan lagi untuk bulan berikutnya).

Dalam turunan Debian, Anacron bekerja dengan baik dengan Cron untuk menangani /etc/cron.{daily,weekly,monthly} dengan tepat (jadi Anda cukup mendefinisikan tugas bulanan Anda sebagai pekerjaan bulanan di /etc/cron.monthly , dan itu akan dijalankan dengan tepat).

Di sistem lain, Anda akan menentukan tugas bulanan Anda di /etc/anacrontab .


Linux
  1. Bagaimana Menjalankan “find -exec {};?

  2. Cara Membuat Script Shell Selalu Jalankan Sebagai Root?

  3. Dari Mana Skrip Shell Dijalankan?

  1. Kompilasi skrip PHP di Linux

  2. Menjalankan skrip shell secara paralel

  3. Jalankan skrip bash setelah login

  1. Jalankan Perintah Yang Dibayangi Alias?

  2. Cara Terbaik Mendeteksi (dari Skrip) Apakah Perangkat Lunak Sudah Diinstal?

  3. Jalankan Script Dengan Argumen Sebagai Pengguna?