我有一个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
,但没有改变。
答案 0 :(得分:1)
问题是该脚本在从cron启动时尝试在根目录中创建临时文件,并且没有权限这样做。
cron配置文件包含HOME=/
。脚本启动时,当前目录为/
。传递给mktemp
的模板只包含文件名,因此mktemp
尝试在当前目录中创建临时文件,它是/
。
$ HOME=/
$ cd
$ mktemp tmp.XXXXXXXXXX
mktemp: failed to create file via template ‘tmp.XXXXXXXXXX’: Permission denied