Crontab 使用指定用户环境变量执行命令

不太理解为何中文技术博客搜不到这个问题的答案。。

其实 crontab 可以直接指定使用什么 shell 因为会用到 source 的关系所以我们可以先制定 shell 为 bash

SHELL=/bin/bash

既不需要自己去建 shell 脚本指定 #!/bin/sh 也不需要在要执行的命令前面加多余的参数。

 

但是也的确有个坑,我理解绝大多数同学要加载环境变量想法都跟我一样会把环境变量存在 ~/.bashrc 中。然后在执行的时候会尝试 source 该文件,比如

SHELL=/bin/bash
12
4 * * * source ~/.bashrc && cd /home/ubuntu/social-insights-magnus/ && xxxx

但是我发现,这样是无法读取到对应环境变量的。交互环境执行没问题,但是使用 crontab 就是不行。这一点我看了一下没弄太明白,但是我们可以新建文件 ~/.bash_profile 将环境变量放在这个里面申明。

然后重写刚才的 crontab 任务

SHELL=/bin/bash
12
4 * * * source ~/.bash_profile && cd /home/ubuntu/social-insights-magnus/ && /opt/go/bin/go xxxx

即可。

 

posted @ 2022-03-07 15:53  piperck  阅读(911)  评论(0编辑  收藏  举报