gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:36:40 25 4
gpt4 key购买 nike

我有一个 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 用于查找,因为我只想返回也有子目录的 $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 作业。

关于linux - 脚本中的 bash for 循环不会作为非根 cron 脚本运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9788642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com