从cron运行时,Bash脚本的行为很奇怪。但是在运行手动

时间:2018-02-20 20:35:01

标签: bash cron

以下脚本正在运行git pull,然后将状态写入文件。

#!/bin/bash
git pull

git log -7 > /var/www/domain.com/v.txt 

当我手动运行文件时,会创建文件v.txt,并按预期创建内容  bash /var/www/domain.io/update.sh

当我通过cron运行时,文件已创建,但内容为为空
* * * * * bash /var/www/domain.io/update.sh

怎么了?

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,交互式shell与cron的运行时环境是不同的。具体而言,像PATH这样的环境变量的设置可以是不同的。这可以影响脚本如何通过cron运行。

作为测试,您可以尝试以下方法。创建一个小型bash shell脚本,将您的环境转储到文件中,并从命令行和cron运行此脚本,并查找差异。

EG。文件名为:r1.sh

#! /bin/bash 
env

从命令行:

$ r1.sh > cmd-line.out

来自cron

* * * * * /home/your-user-name/r1.sh > /home/your-user-name/cron.out

注意:使用shell脚本和输出文件的完整路径名。

当我在我的系统上进行此测试时,两者之间存在许多差异,例如PATH变量要短得多。

如果您的系统出现这种情况,则可能在cron环境中没有“git”。

无论如何,只是一个尝试的想法。 我希望这会有所帮助。