Keduanya menjalankan sesuatu menurut jadwal. Bedanya baru tampak ketika sebuah tugas gagal, ketika sebuah tugas berjalan lama, atau ketika mesinnya sedang mati pada saat tugas itu jatuh tempo.

Cron dan dua jebakannya

crontab -e
# m h dom mon dow  command
15 3 * * *  /usr/bin/php /var/www/site/cron.php >> /var/log/site-cron.log 2>&1
  • Lingkungannya nyaris kosong. PATH-nya seadanya dan profil cangkang Anda tidak dibaca, jadi perintah yang bekerja saat Anda ketik sendiri akan gagal di sini. Pakailah lokasi yang mutlak.
  • Keluarannya surat, bukan log. Tanpa pengalihan di atas, keluarannya masuk ke kotak surat setempat yang tak dibaca siapa pun, dan tugas itu tampak seperti berjalan dengan diam.

Kalau sebuah tugas cron kelihatannya tak pernah jalan sama sekali, daftar periksa di Tugas cron yang tak pernah jalan mencakup sisanya.

Pewaktu, dan apa yang ditambahkannya

# /etc/systemd/system/site-cron.service
[Unit]
Description=Site maintenance

[Service]
Type=oneshot
User=www-data
WorkingDirectory=/var/www/site
ExecStart=/usr/bin/php cron.php
# /etc/systemd/system/site-cron.timer
[Unit]
Description=Run site maintenance nightly

[Timer]
OnCalendar=*-*-* 03:15:00
Persistent=true
RandomizedDelaySec=300

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now site-cron.timer
systemctl list-timers --all
journalctl -u site-cron -n 50

Apa yang diberikan pewaktu kepada Anda

  • Catatan di jurnal, lengkap dengan status keluarnya, untuk tiap jalanan.
  • Tanpa tindih — jalanan yang masih berlangsung ketika yang berikutnya jatuh tempo tidak memulai salinan kedua.
  • Persistent=true — jalanan yang terlewat sewaktu mesinnya mati akan terjadi pada penyalaan berikutnya.
  • RandomizedDelaySec — sekumpulan server tidak menghantam API yang sama serentak tepat pukul 03:15:00.

Yang mana yang dipakai

Tugas satu baris di satu mesin: cron, dan jangan dipikir berlebihan. Apa pun yang riwayatnya perlu Anda lihat, apa pun yang tak boleh berjalan dua kali, dan apa pun yang berarti kalau terlewat: pewaktu.

Jangan menjadwalkan tugas yang sama di keduanya. Ini akibat yang lazim dari perpindahan yang berhenti di tengah jalan, dan ia melipatduakan setiap jalanan — termasuk yang mengirim surat atau menagih kartu.