由cron运行时Bash脚本失败 - mktemp什么都不输出

时间:2015-05-30 22:26:39

标签: bash cron

我有一个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,但没有改变。

1 个答案:

答案 0 :(得分:1)

问题是该脚本在从cron启动时尝试在根目录中创建临时文件,并且没有权限这样做。

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

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