为什么我可以创建但不能从cronjob中的Bash脚本写入文件?

时间:2014-07-22 15:18:24

标签: bash sed cron

我有一个简单的Bash脚本,可以从命令行运行。它需要在脚本开头附近写入两个临时文件。当我将它粘贴在cronjob中时,它将创建临时文件,但不会向其写入任何数据。这些文件的大小为零。每次cron作业重新启动时,我都希望覆盖临时文件。

cron条目基本上如下所示:

0 */4   *   *   *   /opt/myscripts/boringScript.sh 

在剧本中是:

...
echo "Starting boring inventory script"  >>  /opt/myscripts/boringScriptLog.out

countingScript.sh | grep $paramONE | sed s#\ ##g  >  tempResults1.txt
countingScript.sh | grep $paramTWO | sed s#\ ##g  > tempResults2.txt


do 
   // more stuff with the above temp files
   ...
done
...

为什么它不能将任何数据写入cron中的临时文件的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

由于以下两个原因之一,它可能无法写入您的tempResults文件:

  1. 运行countingScript.sh的用户标识,对这些文件没有写入权限
  2. 运行countingScript.sh的用户标识在其运行的目录中没有写权限。
  3. 当你处理cron时,指定你读取或写入的所有脚本和文件的绝对路径是一个非常非常好的主意。我完全没有在你的脚本中看到它。

    例如,您正在指定/opt/myscripts/boringScriptLog.out的完整路径,但依赖于countingScript.sh,tempResults1.txt和tempResults2.txt位于当前工作目录中,并且您的用户具有对这些目录的写入权限。< / p>

    由于脚本正在运行,因此您至少具有对countingScript.sh所在目录的读取和执行权限,但不具有写入权限。

    尝试使用

    /path/to/my/countingScript.sh | grep $paramONE | sed s#\ ##g  >  /tmp/tempResults1.txt
    /path/to/my/countingScript.sh | grep $paramTWO | sed s#\ ##g  >  /tmp/tempResults2.txt
    

    并在您引用它们的脚本的其余部分中修改这些tempResults文件的路径。你会惊讶地发现它们的工作非常好。