解决crontab不加载环境变量问题

公司需要做异构库数据同步,由于之前实际使用过,且字段类型也兼容,满足业务场景,使用了阿里开源数据同步工具:datax,服务器上crontab定时脚本执行。

由于crontab只加载/ect/environment,并不加载/etc/profile和~/.bash_profile,所以需要在脚本里手动添加环境变量

 1 #!/bin/sh
 2 #dates=`date -d "-1 days" "+%Y-%m-%d"`
 3 # --------------------
 4 #---------------------
 5 #  6 . /etc/profiles
 7 . ~/.bash_profile
 8 
 9 dates=`date -d'-1 day' "+%Y-%m-%d"`
10 begindate=${dates}
11 12 13 
14
15 python /opt/tools/datax/bin/datax.py /opt/tools/datax/job/x1.json
16 python /opt/tools/datax/bin/datax.py /opt/tools/datax/job/x2.json
17 python /opt/tools/datax/bin/datax.py /opt/tools/datax/job/x3.json

 

转载于:https://www.cnblogs.com/jandison/p/6897285.html

### 如何在 Crontab 中配置和使用环境变量 #### 编辑 Crontab 文件并添加环境变量 为了确保 cron 作业能够访问所需的环境变量,可以编辑用户的 crontab 文件来定义这些变量。通过终端命令 `crontab -e` 可以进入编辑模式[^1]。 #### 定义必要的 Shell 和路径 对于 CentOS 或其他 Linux 发行版,默认情况下 Cron 并加载用户的全部环境变量集。因此,应该显式地指定使用的 shell 类型以及 PATH 路径。可以在 crontab 文件顶部增加如下两行: ```bash SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ``` 这确保了 cron 使用 Bash 进行解释,并且拥有足够的可执行文件查找范围[^2]。 #### 加载个人 Profile 设置中的变量 如果某些特定的应用程序依赖于 `$HOME/.profile` 或者类似的初始化脚本里设定的环境变量,则可以直接在每条 cron 命令前加上 `. $HOME/.profile;` 来临时导入那些设置。例如: ```bash 0 * * * * . $HOME/.profile; /path/to/command arg1 arg2... ``` 这种方法适用于只需要部分环境变量的情况,而需要修改全局或用户级别的 crontab 配置[^4]。 #### 修改 Shell 初始化脚本 (推荐) 虽然可以通过调整 `.bashrc` 的行为使得非交互式的 shell 也能读取其中的内容,但这并是最佳实践,因为可能会引入必要的复杂性和潜在的安全风险。更好的做法是在 crontab 内部直接声明所需的一切环境参数[^5]。 #### 示例:完整的 Crontab 记录 下面是一个综合的例子,展示了如何在一个实际的任务调度项中应用以上提到的方法: ```bash # 设定 SHELL 和 PATH 环境变量 SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 导入 home 目录下的 profile 文件里的所有导出过的变量 . $HOME/.profile; # 实际要定期执行的任务 */10 * * * * cd /var/www/java/audit_no_count && ./restart_audit.sh >> /tmp/cronjob.log 2>&1 ``` 在这个例子中,仅设置了基本的工作目录切换 (`cd`) ,还重定向了标准输出和错误流到日志文件以便后续排查问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值