У меня есть простой сценарий 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
.