在 crontab 上运行时,环境变量不会传递给子脚本

在 crontab 上运行时,环境变量不会传递给子脚本

我试图运行其中一个脚本(例如wrapper.sh),该脚本使用 crontab 在内部执行其他脚本。它工作正常,没有任何问题。

当我创建了一个环境文件(存储密码数据库和路径)并尝试执行主脚本(wrapper.sh)时,cron 条目不适用于包装器内部调用的那些脚本。

注意:我尝试更改 PATH,在 cron 中的脚本之前添加 env 文件位置,但它仍然不起作用:

9 9 * * * . /$SOMEPATH/some.env; /$SOMEPATH/wrapper.sh

环境脚本 和wrapper.sh位于同一路径中。当 cron 运行时,它将环境变量传递给包装器,但不会传递给包装器内部调用的脚本。此外,还会收到一封邮件,/var/mail/$user称 env 文件为“没有此类文件或目录”。我浏览了很多帖子,但无法找出解决方案。

答案1

$SOMEPATH未在 中定义cron,因此crontab尝试获取源的行将/$SOMEPATH/some.env失败。 (除非//some.env存在。)

对于调试cron相关问题,请注意它写道标准错误消息(包括其自己的消息)发送到本地用户的邮箱。如果您没有安装邮件客户端(mailmailx),您可以使用类似的方法来阅读这些消息:

less /var/mail/$USER

或者如果你想真正通用

"${PAGER:-less}" "${MAIL:-/var/mail/${USER:-${LOGIN:-$(whoami)}}}"

相关内容