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作业,我得到“不是一个文件”打印出来。
我尝试每一个设置我在网上找到解决这个:
- 设置都在crontab中和脚本本身的环境变量(PATH & SHELL)
- 采购轮廓(包括的/ etc /配置文件和。/home/user/.bash_profile)都在crontab中(执行脚本之前)和脚本本身。
- 尝试与-u用户参数运行的crontab,但没有权限为这个(和它没有任何意义,因为我已经登录的用户谁应设置在crontab)
我正在设置脚本应该运行的正确用户的crontab。用户有权访问文件的位置(可以通过从命令行运行脚本来观察)。
寻找关于接下来可以尝试什么的进一步建议。
发现另一个尝试,它的工作。 我在cronjob行中添加了-q标志。
*/1 * * * * /path/script.sh /path/config-file -q
来源:Cron Job error "Could not open input file"
可有人请向我解释这是什么做的? 我不是很聪明bash。
你在做什么是(我认为)确保你的/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(或派生)上创建的文件。
我已经在脚本中“清理”了回车变量的变量(我之前遇到过源变量的类似问题),所以我现在在测试它之前将它应用于CONFIG_FILE变量,并且它可以工作(没有-q标志)。感谢您的洞察! – dbu 2015-01-21 12:52:08
'-q'是'script.sh'的一个选项,我们无法弄清楚它在没有访问源的情况下做了什么。 – tripleee 2015-01-21 12:21:04
@tripleee,'-q'不相关,脚本从不解释它。在cron行中,它只是确保配置文件参数不是行中的最后一个参数,所以这个文件参数没有'\ r'。 – 2015-01-21 12:32:14
@KarelKubat这是一个很好的猜测,但不过猜测。我们无法看到脚本的完整来源。 – tripleee 2015-01-21 12:59:36