# Menjalankan Tugasan Berjadual (Cron) di Hosting cPanel

Tanpa satu entri cron, **tiada tugasan berjadual akan berjalan**. Halaman
Pemantauan hanya akan berubah apabila butang "Semak" ditekan secara manual, dan
e-mel amaran ketika laman web tergendala tidak akan dihantar langsung.

## Apa yang berjadual

| Tugasan | Kekerapan | Kesan |
|---|---|---|
| `uptime:check` | Mengikut Tetapan → Selang Semakan Uptime | Menyemak semua laman web aktif, merekod status, menghantar amaran selepas 3 kegagalan berturut-turut |
| `uptime:prune` | Setiap hari, 3:00 pagi | Membuang sejarah semakan lama supaya jadual tidak membesar tanpa henti |

## Entri cron yang diperlukan

cPanel → **Cron Jobs**. Tetapkan kekerapan **Once Per Minute** (`* * * * *`):

```
cd /home/asyraf/sub_is_prestaweb && php artisan schedule:run >> /dev/null 2>&1
```

Jalankan **setiap minit**, bukan setiap 5 atau 30 minit. Laravel sendiri yang
menentukan tugasan mana yang tiba masanya; cron hanya pintu masuk. Selang
sebenar semakan uptime ditetapkan dalam Tetapan, bukan di sini.

## Dua perkara yang selalu menyebabkan ia gagal

**1. Laluan mesti ke akar aplikasi, bukan `public_html`.**

Folder yang betul ialah yang mengandungi fail `artisan`. Jika subdomain menunjuk
ke `sub_is_prestaweb/public`, maka laluan cron ialah `sub_is_prestaweb` — satu
tingkat di atasnya. Sahkan melalui File Manager: buka folder itu dan pastikan
`artisan`, `composer.json` dan folder `app/` kelihatan.

**2. `php` mungkin bukan versi yang betul.**

Sesetengah hosting memerlukan laluan penuh, contohnya:

```
/usr/local/bin/php
/opt/cpanel/ea-php83/root/usr/bin/php
```

Halaman Cron Jobs cPanel biasanya memaparkan laluan PHP yang digunakan.

## Mengesahkan ia berjalan

Buat entri cron itu dengan log dahulu, bukan `/dev/null`:

```
cd /home/asyraf/sub_is_prestaweb && php artisan schedule:run >> storage/logs/cron.log 2>&1
```

Tunggu dua minit, kemudian buka `storage/logs/cron.log` melalui File Manager.

- Fail kosong bermakna cron berjalan tetapi tiada tugasan tiba masanya — normal.
- Ralat seperti `No such file or directory` bermakna laluan salah.
- `Could not open input file: artisan` bermakna laluan menunjuk ke folder yang
  salah, biasanya `public_html`.

Ujian sebenar: buka halaman **Pemantauan**. Ruangan "Semakan Terakhir" sepatutnya
berubah dengan sendirinya mengikut selang yang ditetapkan, tanpa sesiapa menekan
"Semak". Setelah pasti berjalan, tukar semula `>> /dev/null 2>&1`.

## Sebelum menghidupkannya

`uptime:check` menyemak **semua** laman web aktif dan, selepas 3 kegagalan
berturut-turut, menghantar e-mel kepada webmaster dan PRO laman web berkenaan —
orang sebenar.

Pastikan rekod SPF dan DKIM sudah ditetapkan dahulu, jika tidak amaran tersebut
berisiko masuk ke folder spam dan menjejaskan reputasi domain yang masih baharu.
