Latar Belakang Masalah
Sebagai seorang programmer Odoo, kita wajib untuk melakukan backup rutin aplikasi. Aplikasi Odoo bisa di backup melalui frontend. Namun, ketika harus dilakukan rutin, adakalanya saya lupa untuk melakukan backup. Dikarenakan load pekerjaan yang sedang banyak, atau memang lupa saja :)
Maka dari itu, diperlukan suatu mekanisme backup otomatis. Dan ketika proses backup selesai, entah itu berhasil atau gagal, maka akan mengirimkan notifikasi melalui webhook discord.
Namun, kali ini, saya hanya akan melakukan backup terhadap database-nya saja. Dikarenakan untuk kebutuhannya hanya diperlukan backup transaksi selama 7 hari terakhir.
Tech Yang Digunakan
- Docker
- Crontab
- Shell Script
- Webhook
- Linux
Shell Script
Biasanya saya membuat sebuah folder khusus untuk semua shell script. Misalkan saya akan buat path:
mkdir -p /home/rohimoz28/script/auto_backup.sh
#!/bin/bash
# Define variables
BACKUP_DIR="path_to_backup_dir"
DB_NAME="your_database_name"
DB_USER="your_user_database"
DB_PASSWORD="your_pass_database"
DB_HOST="your_host_name"
DISCORD_WEBHOOK_URL="your_discord_webhook_url)"
TODAY=$(date +"%Y-%m-%d")
TIME_NOW=$(date +"%Y-%m-%d %H:%M:%S")
BACKUP_FILE_TODAY="${BACKUP_DIR}/auto_backup_sanbe_hrms.dump"
BACKUP_GZ_TODAY="${BACKUP_FILE_TODAY}.gz"
# Define a function to send a message to Discord
send_discord_notification() {
local message=$1
# Construct payload
local payload=$(
cat <<EOF
{
"content": "$message"
}
EOF
)
# Send POST request to Discord Webhook
curl -H "Content-Type: application/json" -X POST -d "$payload" $DISCORD_WEBHOOK_URL
}
#1 Check if backup directory exists, if not create it
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
if [ $? -ne 0 ]; then
send_discord_notification "STATUS: Failed\nDB: $DB_NAME\nTIME: $TIME_NOW\nError: Could not create backup directory: $BACKUP_DIR. Check your permissions."
echo "Error: Could not create backup directory: $BACKUP_DIR. Check your permissions."
exit 1
fi
echo "Backup directory created: $BACKUP_DIR"
fi
#2 Export the PostgreSQL password
export PGPASSWORD="$DB_PASSWORD"
#3 Create today's backup as .dump format
if ! pg_dump -U "$DB_USER" -h "$DB_HOST" -F c -b -v -f "$BACKUP_FILE_TODAY" "$DB_NAME"; then
send_discord_notification "STATUS: Failed\nDB: $DB_NAME\nTIME: $TIME_NOW\nError: Failed to create dump backup for $DB_NAME!"
echo "Failed to create dump backup!"
exit 1
else
echo "Created today's dump backup: $BACKUP_FILE_TODAY"
fi
#4 Check if the dump backup file was created before compressing
if [ ! -f "$BACKUP_FILE_TODAY" ]; then
send_discord_notification "STATUS: Failed\nDB: $DB_NAME\nTIME: $TIME_NOW\nError: Dump backup file not found for compression: $BACKUP_FILE_TODAY"
echo "Dump backup file not found for compression: $BACKUP_FILE_TODAY"
exit 1
else
# Compress the dump file into a gzipped file
if ! gzip "$BACKUP_FILE_TODAY"; then
send_discord_notification "STATUS: Failed\nDB: $DB_NAME\nTIME: $TIME_NOW\nError: Failed to compress the backup file!"
echo "Failed to compress the backup file!"
exit 1
else
echo "Compressed dump backup into GZ: $BACKUP_GZ_TODAY"
# send_discord_notification "STATUS: Success\nDB: $DB_NAME\nTIME: $TIME_NOW\nSuccess: create auto backup $DB_NAME is success!"
fi
fi
Crontab
Untuk lebih mudah dalam mengatur waktu pada crontab sesuai yang kita inginkan, bisa mengunjungi website ini.
Misalkan saya ingin menjalankan proses backup otomatis menggunakan script auto_backup.sh pada
jam 5 pagi setiap harinya.
-
buka crontab
crontab -e -
ketikkan waktu yang diinginkan
0 5 * * * /home/rohimoz28/script/auto_backup.sh
Kesimpulan
Menggunakan gabungan shell script dan crontab merupakan hal yang lumrah pada linux jika kita ingin membuat sebuah task yang akan berjalan rutin dan otomatis.
Terimakasih