Cron iş komutlarının, doğrudan etkileşimli bir kabuğa yazılan komutlara kıyasla, yaygın sıraya göre farklı davranmasının üç yaygın nedeni vardır:
- Cron sınırlı bir ortam sağlar, örneğin minimal
$PATH
ve beklenen diğer değişkenler eksiktir.
- Cron
/bin/sh
varsayılan olarak çağırır , oysa etkileşimli olarak başka bir kabuk kullanıyor olabilirsiniz.
- Cron
%
karakteri özel olarak ele alır (komutta yeni bir satıra dönüştürülür).
- Cron terminal veya grafik ortamı sağlamaz.
Tüm %
karakterlerden önce \
crontab dosyasında bir c ile yer almalısınız ; bu, cron'a komutun içine yalnızca yüzde koymasını söyler. date
Komutu bir cron işinde kullandığınızı unutmayın .
55 8 * * 3 /usr/bin/php /home/mark/dev/processes/customClient/events.php > "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"
0 9 * * 3 /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s "Events from $(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d)" -a "/home/mark/dev/processes/customClient/events-$(date +\%Y-\%m-\%d --date='last Wednesday')-$(date +\%Y-\%m-\%d).csv"
Ayrıca bazı alıntı sorunları giderdim:
- Bu, okunaklılık dışında sorunlara neden olmuyordu, ancak komut yerine koymak için backtick kullanmamalısınız.
$(…)
Bunun yerine kullanın : ayrıştırma kuralları daha basittir.
- Değişken ve komut ikameleri için her zaman çift tırnak kullanın:
"$somevariable"
, "$(somecommand)"
. Burada tırnak eksikliği zararsızdı, çünkü date
komut kullandığınız formatlar için herhangi bir özel karakter döndürmedi, ancak hangi karakterlerin özel olduğunu dikkatlice hatırlamanız ve her değiştirmeden ayrıldığınızda bunu kontrol etmeniz gerekiyor. Basit olun, sonuçta alan bölme ve dosya adı oluşturma işleminin olmasını istemediğiniz sürece her zaman çift tırnak kullanın.
- Bazı komut ikamelerinin etrafında genişlemeyi engelleyen bazı tek tırnaklarınız vardı. Bunun yerine çift tırnak kullanın.
/bin/sh: 1: Syntax error: EOF in backquote substitution
İlk cron işi için./bin/sh: 1: Syntax error: Unterminated quoted string
İkinci cron işi için.