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
$PATHve beklenen diğer değişkenler eksiktir.
- Cron
/bin/shvarsayı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. dateKomutu 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ü datekomut 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.