Crontab任务执行脚本source无法获取环境变量
2017-09-01 10:38
225 查看
最近在使用Linux的过程中,需要通过crontab任务启动一个脚本,并且在脚本中需要使用到本地的环境变量。查了很多的网上资料,都说使用“source”或者“.”就可以了,如下所示:
但是,实际执行过程中发现,并没有获取到对应的环境变量。经过好几天排查发现,在.bashrc文件开始的地方发现这样几行代码(不同的Linux系统可能有不同的实现,但都是相同的用处。):
这几行代码的意思是,如果不是用交互式方式执行该文件,则直接退出。默认情况下,用crontab任务启动脚本是关闭该交互式选项的。因此,当使用crontab任务执行脚本时,会直接return,因此不会执行.bashrc之后的代码。有两种办法解决:
直接注释掉.bashrc中的几行代码。这样做,之后所有的crontab任务都可以直接使用source来获取.bashrc中设置的环境变量,但是可能会对其他地方的产生影响,毕竟.bashrc中设置的环境变量可能会覆盖掉其他的环境变量;
可以在crontab执行的脚本中,手动设置交互式方式选项为打开状态,如下所示。不过这种方式只对当前脚本有效。
PS:通过在命令行输入“shopt”命令,可以看到当前shell的相关配置项。可以通过set命令对这些选项进行设置on/off。
#! /bin/bash source ~/.bashrc ......
但是,实际执行过程中发现,并没有获取到对应的环境变量。经过好几天排查发现,在.bashrc文件开始的地方发现这样几行代码(不同的Linux系统可能有不同的实现,但都是相同的用处。):
# If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
这几行代码的意思是,如果不是用交互式方式执行该文件,则直接退出。默认情况下,用crontab任务启动脚本是关闭该交互式选项的。因此,当使用crontab任务执行脚本时,会直接return,因此不会执行.bashrc之后的代码。有两种办法解决:
直接注释掉.bashrc中的几行代码。这样做,之后所有的crontab任务都可以直接使用source来获取.bashrc中设置的环境变量,但是可能会对其他地方的产生影响,毕竟.bashrc中设置的环境变量可能会覆盖掉其他的环境变量;
可以在crontab执行的脚本中,手动设置交互式方式选项为打开状态,如下所示。不过这种方式只对当前脚本有效。
#! /bin/bash set -i source ~/.bashrc ......
PS:通过在命令行输入“shopt”命令,可以看到当前shell的相关配置项。可以通过set命令对这些选项进行设置on/off。
相关文章推荐
- crontab与bash环境变量不一致导致的无法定时执行任务~
- crontab中使用环境变量的方法(手动执行shell脚本可以,在定时任务中不行)
- crontab执行python脚本,没有读取root的环境变量
- Python脚本在crontab定时任务中无法运行,但是对应脚本手动执行成功
- [Shell]crontab 执行任务调用shell脚本,相对路径无法找到
- linux下简单的磁盘报警脚本/crontab无法获取变量
- crontab 中 python(cx_Oracle)脚本执行时需要用户环境变量,怎么办??
- crontab执行任务调用shell脚本,相对路径无法找到
- 有crontab中的脚本不执行,需要在脚本里面export各种环境变量
- Solaris系统 sudo 执行脚本是无法传递环境变量
- 在crontab中执行python脚本系统环境变量问题
- crontab无法执行-环境变量问题
- 由crontab执行expect脚本问题引发的--crontab环境变量问题
- 由crontab执行expect脚本问题引发的--crontab环境变量问题
- crontab添加了定时任务却无法执行
- linux设置Hadoop执行脚本到环境变量
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- PHP计划任务:如何使用Linux的Crontab执行PHP脚本
- 无法在环境变量中找到make命令: make 构建项目HelloWorld 时发生错误 (目标: 桌面) 当执行构建步骤 'Make'时
- sudo执行脚本找不到环境变量解决方法