Bash 当 cron 运行 时脚本失败 - mktemp 不输出任何内容

Bash script failing when run by cron - mktemp outputting nothing

我有一个 shell 脚本,当我手动 运行 它时它可以工作,但是当 运行 通过 cron 时它会默默地失败。我已将其缩减为一个非常小的示例:

#!/usr/bin/env bash

echo "HERE:"
echo $(mktemp tmp.XXXXXXXXXX)

如果我从命令行运行,它输出HERE:和一个新的临时文件名。

但是如果我从这样的 cron 文件中 运行 它,我只会得到 HERE: 后跟一个空行:

SHELL=/bin/bash
HOME=/
MAILTO=”me@example.com”

0 5 * * * /home/phil/test.sh > /home/phil/cron.log

有什么区别?我也试过使用 /bin/mktemp,但没有改变。

问题是脚本从 cron 启动时试图在根目录中创建临时文件,但它没有这样做的权限。

cron 配置文件包含 HOME=/。脚本启动时,当前目录为 /。传递给 mktemp 的模板仅包含文件名,因此 mktemp 尝试在当前目录中创建临时文件,它是 /.

$ HOME=/
$ cd
$ mktemp tmp.XXXXXXXXXX
mktemp: failed to create file via template ‘tmp.XXXXXXXXXX’: Permission denied