繁体   English   中英

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

[英]bash for-loop in script won't run as non-root cron script

我有一个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)充满已扫描jpeg的某些目录,运行php程序以批量处理这些jpeg(预览/缩略图),将其上传到服务器,并在成功后清除前面提到的目录。 除了最后一个清理步骤外,所有其他操作都像魅力一样。 但是,如果我以www-data用户的身份从命令行运行它,则它将起作用。 当通过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-data),其中包含带有要忽略的目录行(同一文件用于告诉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作业。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM