82 lines
3.4 KiB
Plaintext
82 lines
3.4 KiB
Plaintext
Untuk menghapus session yang tersimpan di database setiap malam secara otomatis, cara terbaik dan paling efisien adalah dengan memanfaatkan **Cron Job** pada level *database server* (PostgreSQL) atau melalui fitur **Scheduled Actions** bawaan Odoo.
|
|
|
|
Karena Anda menggunakan modul `session_db`, semua data session lama yang sudah kedaluwarsa (*expired*) akan menumpuk di salah satu tabel database (biasanya bernama `session_db_session` atau `ir_session`).
|
|
|
|
Berikut adalah 2 metode otomatis yang bisa Anda gunakan:
|
|
|
|
---
|
|
|
|
### Metode 1: Menggunakan Scheduled Actions Odoo (Paling Direkomendasikan)
|
|
|
|
Sebagian besar modul `session_db` dari OCA atau komunitas sudah menyediakan fungsi *cleanup* (pembersihan) otomatis yang terintegrasi dengan fitur **Scheduled Actions (Automated Actions)** Odoo.
|
|
|
|
1. Masuk ke Odoo menggunakan akun **Administrator**.
|
|
2. Aktifkan **Developer Mode** (Mode Pengembang).
|
|
3. Buka menu **Settings** > **Technical** > **Automation** > **Scheduled Actions**.
|
|
4. Cari aksi yang bernama seperti:
|
|
* `Session: Cleanup expired sessions`
|
|
* `Session DB: Purge sessions`
|
|
* *(Atau cari dengan kata kunci "session" di kolom pencarian)*.
|
|
|
|
|
|
5. Klik aksi tersebut, lalu ubah konfigurasinya:
|
|
* **Execute Every:** `1 Days`
|
|
* **Next Execution Date:** Atur ke jam yang Anda inginkan (misal nanti malam jam `00:00:00`).
|
|
* **Active:** Pastikan dalam posisi *True* (Centang).
|
|
|
|
|
|
|
|
> 💡 **Kelebihan:** Metode ini sangat aman karena Odoo akan menghapus session berdasarkan umur kedaluwarsa yang logis, sehingga pengguna yang sedang aktif tidak akan tiba-tiba ter-log out.
|
|
|
|
---
|
|
|
|
### Metode 2: Menggunakan Cron Job Script (Eksternal / Sisi Host)
|
|
|
|
Jika modul yang Anda gunakan tidak menyediakan Scheduled Actions, atau Anda ingin memastikan database benar-benar bersih total setiap jam 12 malam tanpa membebani *resource* aplikasi Odoo, Anda bisa membuat Cron Job langsung di server Linux (*host* tempat Docker berjalan).
|
|
|
|
#### Langkah 1: Buat Script Pembersih
|
|
|
|
Buat file baru di server Anda, misalnya bernama `/opt/cleanup_odoo_session.sh`:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
|
|
# Perintah untuk mengosongkan tabel session via Pgpool/Postgres Docker
|
|
# Ganti 'odoo_db' dengan nama database Odoo Anda yang sebenarnya
|
|
docker exec -i $(docker ps -q -f name=pgpool) psql -U odoo -d odoo_db -c "DELETE FROM session_db_session WHERE write_date < NOW() - INTERVAL '1 day';"
|
|
|
|
```
|
|
|
|
*(Catatan: Sesuaikan nama tabel `session_db_session` dan kolom `write_date` dengan struktur tabel yang dibuat oleh modul Anda. Jika ingin menghapus **semua** session tanpa pandang bulu, Anda bisa menggunakan perintah `TRUNCATE TABLE nama_tabel;`)*.
|
|
|
|
#### Langkah 2: Beri Izin Akses Script
|
|
|
|
```bash
|
|
chmod +x /opt/cleanup_odoo_session.sh
|
|
|
|
```
|
|
|
|
#### Langkah 3: Daftarkan ke Crontab Linux
|
|
|
|
1. Buka terminal server Anda dan ketik:
|
|
```bash
|
|
crontab -e
|
|
|
|
```
|
|
|
|
|
|
2. Tambahkan baris berikut di bagian paling bawah file untuk menjalankan script **setiap malam jam 00:00**:
|
|
```text
|
|
0 0 * * * /opt/cleanup_odoo_session.sh > /dev/null 2>&1
|
|
|
|
```
|
|
|
|
|
|
3. Simpan dan keluar.
|
|
|
|
---
|
|
|
|
### ⚠️ Catatan Penting Sebelum Eksekusi:
|
|
|
|
* **Efek Samping:** Jika Anda menggunakan perintah hapus total (`TRUNCATE`), semua pengguna (termasuk Anda) yang sedang membuka Odoo di HP atau laptop otomatis akan ter-log out (keluar) dan harus melakukan login ulang keesokan paginya.
|
|
* **Cek Nama Tabel:** Pastikan Anda memeriksa nama tabel session Anda terlebih dahulu melalui *Database Manager* atau pgAdmin. Nama tabel umum untuk modul ini adalah `session_db_session`, `ir_session`, atau `res_users_session`. |