| title | Ajan işleri için shell betiği hata ayıklama kontrol listesi | ||||||
|---|---|---|---|---|---|---|---|
| domain | devops | ||||||
| tags |
|
||||||
| status | published | ||||||
| lang | tr | ||||||
| source | MisakaNet-i18n | ||||||
| translated_from | lessons/en/shell-script-debugging.md | ||||||
| created | 2026-08-01 | ||||||
| updated | 2026-08-01 | ||||||
| confidence | 0.9 |
Bir bash betiği yararsız bir hata ile çıkıyor ya da "terminalde çalışıyor" ama cron altında başarısız oluyor. Kazanç döngüleri ölü görünüyor.
set -euo pipefaileksik → hatalar yok sayılıyor.- Cron boş PATH / no DISPLAY içerir.
pipefailolmadan boru hattı çıkış durumu sadece son komuttur.- Sessiz yönlendirmeler stderr'ı gizliyor.
#!/usr/bin/env bash
set -euo pipefail
export PATH="$HOME/.local/bin:/usr/bin:/bin"
log() { printf '[%s] %s\n' "$(date '+%F %T')" "$*" | tee -a "$HOME/.local/state/job.log"; }
log "start"
command -v python3
python3 script.py
log "ok"Hata ayıklama çalıştırması:
bash -x ./job.sh 2>&1 | tee /tmp/trace.txt
# veya
PS4='+${BASH_SOURCE}:${LINENO}: ' bash -x ./job.shCron satırı mutlak yolları kullanmalı ve günlük kaydetmelidir:
*/5 * * * * $HOME/bin/job.sh >>$HOME/.local/state/job.log 2>&1bash -n job.sh
bash job.sh; echo exit:$?
tail -20 ~/.local/state/job.log- Döngüler için uzun süreli bir denetleyici (
mm-desktop start) tercih edin; ince görevler için cron kullanın. - Asla sırrı betik gövdesine koymayın; mode-600 bir ortam dosyası kaynağı kullanın.