Cara Buat Shell Script untuk Menghapus File Session Lama Secara Otomatis

ProgrammingTutorial

 

Saya ada kesulitan sering kehabisan space storage di hosting. Setelah dicek, ternyata ada satu folder yang file sessionsnya numpuk sampai ber-giga-giga. Nah ini waktunya untuk bikin otomasi untuk menghapus file file tersebut. Caranya dengan membuat shell script.

Shell script adalah alat yang sangat berguna dalam administrasi sistem, memungkinkan otomatisasi tugas-tugas berulang. Salah satu kebutuhan yang umum dalam pengelolaan server adalah menghapus file session yang sudah kadaluarsa untuk menghemat ruang penyimpanan dan meningkatkan performa.

Berikut di bawah contoh shell script untuk menghapus file session yang sudah lama secara otomatis. Shell script ini dapat menerima variabel dari command line untuk menghapus file session berdasarkan usia file dengan tingkat keamanan tambahan agar tidak menghapus file yang tidak diinginkan.

Cara penggunaan:

./clean_sessions.sh /path/to/sessions 1h session_

Contoh di atas akan menghapus file yang:

  • Berada di /path/to/sessions/
  • Namanya diawali dengan session_
  • Sudah lebih dari 1 jam sejak terakhir diubah

Cukup dengan menggunakan crontab untuk membuat schedulenya. Misalnya seperti dibawah ini,  akan menjalankan script tersebut setiap jam 4 pagi.

0 4 * * * sh /home/arif/clean_sessions.sh /home/website/tmp/sessions/ 5h ci_

Berikut scriptnya:


#!/bin/sh

# Cek apakah parameter sudah diberikan
if [ “$#” -lt 2 ]; then
echo “Usage: $0 ”
echo “Example: $0 /path/to/sessions 1h session”
exit 1
fi

# Parameter yang diterima
SESSIONS_PATH=$1
TIME_LIMIT=$2
PREFIX=$3

# Proteksi: Pastikan prefix diberikan, agar tidak menghapus semua file sembarangan
if [ -z “$PREFIX” ]; then
echo “Error: Prefix harus diberikan untuk keamanan!”
exit 1
fi

# Fungsi untuk mengonversi format waktu ke detik
convert_time_to_seconds() {
TIME=$1
UNIT=$(echo “$TIME” | sed -E ‘s/[0-9]+//g’) # Mendapatkan unit waktu (s, m, h, d)
VALUE=$(echo “$TIME” | sed -E ‘s/[^0-9]//g’) # Mendapatkan nilai angka

case “$UNIT” in
s) echo “$VALUE” ;; # Detik
m) echo $(($VALUE * 60)) ;; # Menit ke detik
h) echo $(($VALUE * 3600)) ;; # Jam ke detik
d) echo $(($VALUE * 86400)) ;;# Hari ke detik
*) echo “Invalid time format”; exit 1 ;;
esac
}

# Mengonversi waktu limit ke dalam detik
TIME_LIMIT_SECONDS=$(convert_time_to_seconds “$TIME_LIMIT”)

# Menghitung waktu sekarang dalam detik
CURRENT_TIME=$(date +%s)

# Iterasi melalui semua file di dalam direktori sessions dengan prefix yang sesuai
for session_file in “$SESSIONS_PATH”/”$PREFIX”*; do
# Pastikan file benar-benar ada sebelum lanjut
if [ -f “$session_file” ]; then
# Mendapatkan waktu modifikasi file dalam detik
FILE_MOD_TIME=$(stat -c %Y “$session_file”)

# Menghitung selisih waktu antara sekarang dan waktu modifikasi file
AGE=$(($CURRENT_TIME – $FILE_MOD_TIME))

# Jika umur file lebih besar dari time limit, hapus file
if [ “$AGE” -gt “$TIME_LIMIT_SECONDS” ]; then
echo “Deleting session file: $session_file (age: $AGE seconds)”
rm “$session_file”
fi
fi
done

Mungkin Kamu juga suka

Kumpulan Command Ubuntu yang Sering Digunakan oleh Sysadmin

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Fill out this field
Fill out this field
Mohon masukan alamat email yang sah.
You need to agree with the terms to proceed

Latest

Tak ditemukan hasil apapun.