Cron作业没有“看到”文件

问题描述:

我将包含要获取的变量的文件路径作为参数传递给我的Bash脚本。 该文件是在Windows上创建的,以防有什么区别。执行Cron作业没有“看到”文件

下列检查:

CONFIG_FILE=$1 
if [[ -f ${CONFIG_FILE} ]]; then 
    echo "Is a file" 
    . ${CONFIG_FILE} 
else 
    echo "Not a file" 
fi 

当我手动运行该脚本,在命令行中,检查是好的,变量会马上来源。

然而,当我设置使用

*/1 * * * * /full/path/to/script.sh /full/path/to/configfile 

cron作业,我得到“不是一个文件”打印出来。

我尝试每一个设置我在网上找到解决这个:

  1. 设置都在crontab中和脚本本身的环境变量(PATH & SHELL)
  2. 采购轮廓(包括的/ etc /配置文件。/home/user/.bash_profile)都在crontab中(执行脚本之前)和脚本本身。
  3. 尝试与-u用户参数运行的crontab,但没有权限为这个(和它没有任何意义,因为我已经登录的用户谁应设置在crontab)

我正在设置脚本应该运行的正确用户的crontab。用户有权访问文件的位置(可以通过从命令行运行脚本来观察)。

寻找关于接下来可以尝试什么的进一步建议。

发现另一个尝试,它的工作。 我在cronjob行中添加了-q标志。

*/1 * * * * /path/script.sh /path/config-file -q 

来源:Cron Job error "Could not open input file"

可有人请向我解释这是什么做的? 我不是很聪明bash。

+0

'-q'是'script.sh'的一个选项,我们无法弄清楚它在没有访问源的情况下做了什么。 – tripleee 2015-01-21 12:21:04

+0

@tripleee,'-q'不相关,脚本从不解释它。在cron行中,它只是确保配置文件参数不是行中的最后一个参数,所以这个文件参数没有'\ r'。 – 2015-01-21 12:32:14

+0

@KarelKubat这是一个很好的猜测,但不过猜测。我们无法看到脚本的完整来源。 – tripleee 2015-01-21 12:59:36

你在做什么是(我认为)确保你的/path/config-file背后有一个单独的论点。你原来的问题似乎是在Unix上,你的配置文件被表示为/path/config-file\r(注意尾部\ r)。你正在通过添加一个参数-q\r这样做,以便配置文件本身是“干净的”回车。您可以为此添加blabla\r而不是-q\r。你的脚本不会解释额外的参数;但是如果你把它放在cron行上,那么你的配置文件参数是“受保护的”,因为它后面有东西,就是这样。

你也可以做的是确保你的cron定义是Unix风格(\n终止行)而不是DOS风格(\r\n终止行)。你的Unix机器上可能有一个实用程序dos2unix来完成这个任务。

或者您可以使用crontab -r删除Unix上的crontab,然后使用crontab -e重新创建crontab。不要上传在MS-DOS(或派生)上创建的文件。

+0

我已经在脚本中“清理”了回车变量的变量(我之前遇到过源变量的类似问题),所以我现在在测试它之前将它应用于CONFIG_FILE变量,并且它可以工作(没有-q标志)。感谢您的洞察! – dbu 2015-01-21 12:52:08