批处理用户的环境变量未在su -c中设置

时间:2014-09-05 21:34:42

标签: python bash environment-variables su

我尝试设置我的/etc/rc.local,以便在重新启动时自动启动另一个用户的进程。出于某种原因,此用户的.bash_rc似乎没有被初始化。

这是我添加到/etc/rc.local的命令:

sudo su -l batchuser -c "/home/batchuser/app/run_prod.sh &"

这没有用,所以我也试过了:

sudo su -l batchuser -c ". /home/batchuser/.profile; /home/batchuser/app/run_prod.sh &"

run_prod.sh只是启动一个python脚本。 python脚本失败,因为它引用了在.bash_rc中初始化的python路径中的模块


编辑:当我这样做时它会起作用

sudo su -l batchuser -c "export PYTHONPATH=/my/python/path; /home/batchuser/app/run_prod.sh &"

为什么这样做而不是上面的陈述?为什么.bashrc没有初始化?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我不能完全解释这种行为,但我最终做了这种事情:

sudo $PYTHONPATH=$PYTHONPATH the_command

或更具体地针对您的情况,

sudo $PYTHONPATH=$PYTHONPATH su -l batchuser -c /home/batchuser/app/run_prod.sh &"

这对你有用吗?如果是这样,您可能会发现它并不像您期望的那样立即返回。您可能需要将&移到引号之外,以便它适用于sudo命令。