脚本中的 bash for 循环不会作为非根 cron 脚本运行



我有一个cron脚本,每晚从系统范围的/etc/crontab运行,如下所示:

00 01 * * * www-data /root/scripts/image-auto-process.sh 1> /var/data/logs/cron.out 2> /var/data/logs/cron.err

这是一个bash脚本,它备份(使用rsync)一些充满扫描的jpegs的目录,运行php程序来批量处理这些jpegs(预览/缩略图),将它们上传到服务器,并在成功后清除前面提到的目录。除了最后一个清理步骤外,其他一切都很有魅力。但是,如果我以www数据用户的身份从命令行运行它,它就可以工作了。当它作为同一用户通过cron运行时,它不会。

最后一个清除步骤如下所示:

echo "remove original scans"
for i in `find $SCAN_ORIG_DIR -mindepth 2 -type d -print | grep -v -f $EXCLUDES`; do rm -rvf $i; done
echo "job Done..."

$SCAN_ORIG_DIR是要搜索的目录。$EXCLUDES是一个文件(www数据可读),包含要忽略的目录行(同一个文件用于告诉rsync要备份哪些而不是)-mindepth 2在find中使用,因为我只想返回$SCAN_ORIG_DIR中也有子目录的子目录,比如$SCAN_ORIG_DIR/subdir/subsubdir

我尝试将上面的代码放入自己的脚本中,并在命令行和cron上运行它,只是为了确保脚本中没有以前的代码导致问题。命令行中的结果(不是确切的表示,只是为了说明):

remove original scans
removed '$SCAN_ORIG_DIR/subdir1/subsubdir'
removed '$SCAN_ORIG_DIR/subdir2/subsubdir'
removed '$SCAN_ORIG_DIR/subdir3/subsubdir'
job Done...

通过cron:的结果

remove original scans
job Done...

所以,我被难住了。我真诚地希望任何人都能帮助揭露这里的错误。非常感谢您的时间和努力:-)

在cron中运行脚本时的一个常见问题是,用户登录脚本(.bashrc、bash_profile)没有执行,因此缺少一些变量。

顺便说一句,使用系统范围的/etc/crontab不是一个好的做法。使用crontab-e添加cron作业。

最新更新