Cron & Troubleshooting

Memeriksa scheduler, status worker, invoice ganda, notifikasi, dan masalah checkout Renewal.

Pemeriksaan Aman

Perintah berikut hanya membaca data dan tidak membuat order baru.

Cek event Renewal

bash
wp cron event list \
  --fields=hook,next_run_relative,recurrence \
  | grep dw_sejoli_renewal_process_expired_subscriptions

Event normal dijadwalkan setiap satu jam.

Cek status worker terakhir

bash
wp option get dw_sejoli_renewal_auto_worker_state --format=json

Status yang mungkin muncul:

  • running — worker sedang berjalan;
  • completed — eksekusi selesai;
  • skipped-locked — eksekusi dilewati karena worker lain masih memegang lock;
  • failed — terjadi error; periksa field error dan log Sejoli.

Cek lock worker

bash
wp option get dw_sejoli_renewal_auto_worker_lock --format=json

Lock mencegah worker addon dan proses upstream berjalan bersamaan. Lock mempunyai stale recovery sekitar 30 menit.

Event Renewal Tidak Ada

Periksa hal berikut:

  1. Plugin Sejoli dan Addon Sejoli Renewal aktif.
  2. Lisensi Renewal valid.
  3. WordPress dapat menyelesaikan proses bootstrap tanpa fatal error.
  4. Muat satu halaman WordPress; addon akan menjadwalkan ulang event yang hilang.
  5. Jalankan kembali pemeriksaan event.

Jika DISABLE_WP_CRON bernilai true, pastikan cron server benar-benar memanggil wp-cron.php.

Event Selalu now

Status now berarti event sudah jatuh tempo. Jika terus tertahan:

  • pastikan server cron berjalan;
  • periksa proses PHP yang macet;
  • periksa fatal error pada log PHP/WordPress;
  • periksa apakah cron lain memenuhi queue;
  • hindari menghapus seluruh option cron sebagai langkah pertama.

Mengganti option cron menjadi nama lain akan menghapus seluruh jadwal aktif WordPress untuk sementara. Semua plugin belum tentu menjadwalkan ulang event dengan cara yang sama, sehingga tindakan tersebut berisiko menghilangkan pekerjaan terjadwal lain.

Banyak Event Reminder

Hook sejoli/reminder/check dan sejoli/reminder/send berasal dari sistem reminder Sejoli, bukan event worker Renewal itu sendiri.

Addon Renewal membantu:

  • menghapus reminder untuk siklus yang sudah berhasil diperpanjang;
  • menghapus reminder recurring yang sudah melewati grace period sebelum dikirim.

Jika jumlah event tetap tidak wajar, audit sumber pendaftaran event di Sejoli dan data reminder; jangan hanya berulang kali mereset option cron.

Status Dry-run Tidak Sesuai Toggle

Jika Buat Invoice Renewal Otomatis terlihat dicentang tetapi ringkasan masih menampilkan Fitur tidak aktif, lakukan hard refresh agar browser memuat JavaScript addon terbaru. Ubah checkbox sekali lagi dan pastikan hasil dry-run diperbarui otomatis.

Invoice Tidak Dibuat Otomatis

Periksa:

  • Buat Invoice Renewal Otomatis aktif atau produk memilih Aktif;
  • Emergency Pause tidak aktif;
  • order awal dibuat pada atau setelah tanggal cutoff;
  • subscription sudah expired tetapi belum melewati grace period;
  • produk dan order asal masih tersedia;
  • gateway yang dipilih valid;
  • belum ada order renewal untuk siklus yang sama;
  • status worker terakhir bukan failed atau skipped-locked berkepanjangan.

Cari event log seperti:

text
renewal-scheduler-start
renewal-scheduler-complete
auto-renewal-created
auto-renewal-skip
auto-renewal-failed

Alasan auto-renewal-skip dapat berupa auto-renewal-disabled, subscription-not-expired, renewal-window-expired, atau renewal-order-exists.

Invoice Lama Tiba-Tiba Dibuat

Segera lakukan:

  1. Aktifkan Emergency Pause — Hentikan Worker Sementara.
  2. Jangan menjalankan worker secara manual.
  3. Periksa cutoff, grace period global, dan grace period per produk.
  4. Periksa jumlah kandidat dan rincian pengecualian pada dry-run.
  5. Audit invoice yang sudah dibuat sebelum mengirim pembatalan atau notifikasi koreksi.
  6. Setelah konfigurasi benar, lepaskan emergency pause.

Notifikasi Renewal Tidak Terkirim

Periksa:

  • kanal email/WhatsApp aktif pada Order Renewal;
  • gateway notifikasi Sejoli berfungsi;
  • lisensi Renewal valid saat order dibuat;
  • order dikenali sebagai renewal;
  • log renewal-notification untuk status sent atau failed.

Addon menyimpan status pengiriman pada metadata order agar trigger yang sama tidak dikirim berulang kali.

Member Menerima Notifikasi On-Hold Biasa

Versi terbaru mempunyai dua lapis perlindungan untuk menahan notifikasi on-hold pada order renewal. Jika masalah muncul:

  1. Pastikan addon menggunakan versi terbaru.
  2. Pastikan file plugin lengkap dan tidak ada class yang gagal dimuat.
  3. Periksa log renewal-on-hold-filter.
  4. Lihat nilai is_renewal dan decision; order renewal seharusnya menghasilkan decision: block.

Checkout Renewal Tidak Bisa Dibuka

Pesan umum dan artinya:

PesanPenyebab umum
Order ID tidak ditemukanURL tidak membawa order_id yang valid.
Order tidak memiliki data subscriptionOrder bukan order recurring yang valid.
Anda tidak memiliki aksesUser login bukan pemilik subscription.
Masa perpanjangan sudah berakhirSubscription melewati batas renewal produk.
Order perpanjangan sudah tersediaSudah ada invoice pending untuk siklus yang sama; lanjutkan invoice tersebut.

Pastikan halaman member memakai shortcode:

text
[dw_smaui_renewal]

WP-CLI Menampilkan Warning HTTP_HOST

Warning Undefined array key HTTP_HOST atau SERVER_ADDR biasanya berasal dari kode situs/plugin yang menganggap proses selalu berjalan melalui web server. Warning ini tidak selalu berarti cron gagal, tetapi dapat merusak output JSON WP-CLI.

Untuk diagnosis, perbaiki kode terkait agar aman di konteks CLI atau definisikan environment yang sesuai pada wrapper WP-CLI. Jangan menyembunyikan fatal error hanya dengan memotong output.

Last updated Aug 15, 2026