Назад | Перейти на главную страницу

egrep не работает в crontab

У меня есть простой сценарий bash, который отлично работает при запуске в командной строке, но не в crontab:

#!/bin/bash
PATH=/usr/bin:/bin

for f in /data/home/cwolff/tmp/*access_log*.txt;
do
egrep "r:[A-Z]+ \S+[^\.\s]{5} " $f >> $f.min
done

При запуске в crontab выводит пустые файлы * .min. Я читал о некоторых символах, таких как%, которые нужно экранировать в crontab, но я не использую ни один из них.

Будьте осторожны с диапазонами вроде [A-Z], поскольку значение этого зависит от локали. Может быть [ABC...], но это также может быть [AaBbCc...]. [:upper:] четко определено.

Итак, я лучше всего проверю среду в вашей оболочке входа в систему против cron, особенно LC_ALL, LC_COLLATE, LC_CTYPE, LANG.

Это могло быть вызвано разрешениями.

Вы бы увидели именно такое поведение, если бы у вас было разрешение на чтение всех файлов в /data/home/cwolff/tmp/*access_log*.txt но пользователь, crontab которого вы запускаете, этого не делает.

Это также будет иметь место, если /data монтируется с использованием NFS без no_root_squash option, а crontab принадлежит root.

Ошибки от заданий cron обычно отправляются соответствующему пользователю по почте. Если вы не потратили время на настройку своей почты, вероятно, они находятся в /var/spool/mail/user.