我试图运行其中一个脚本(例如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
相关问题,请注意它写道标准错误消息(包括其自己的消息)发送到本地用户的邮箱。如果您没有安装邮件客户端(mail
或mailx
),您可以使用类似的方法来阅读这些消息:
less /var/mail/$USER
或者如果你想真正通用
"${PAGER:-less}" "${MAIL:-/var/mail/${USER:-${LOGIN:-$(whoami)}}}"