egrep 在 crontab 中不起作用

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 中转义,但我没有使用它们中的任何一个。

答案1

小心使用像 这样的范围[A-Z],因为它的含义取决于语言环境。它可能是[ABC...],但也可能是[AaBbCc...][:upper:]定义明确。

因此,我最好的选择是检查登录 shell 与 cron 中的环境,尤其是LC_ALL, LC_COLLATE, LC_CTYPE, LANG

答案2

这可能是由权限引起的。

如果您有权限读取所有文件/data/home/cwolff/tmp/*access_log*.txt,但运行此命令的 crontab 的用户却没有权限,那么您就会看到这种行为。

/data如果使用不带no_root_squash选项的 NFS 进行挂载并且 crontab 是 root 的,也会出现这种情况。

cron 作业的错误通常会通过邮件发送给相关用户。如果您没有花时间配置邮件设置,这些错误可能位于 中/var/spool/mail/user

相关内容