我们在linux下跑的服务有的时候需要配置对应的参数传递到进程或者程序依赖的一些包的路径需要提前指定,比如为了让程序支持根据不同环境(开发、测试、预发布、生产环境)使用不同的host,那么很多时候我们就可以通过环境变量来传递对应的host。比如java程序需要指定jdk 的路径依赖JAVA_HOME等等。
那么tars它支持给服务设定环境变量吗?答案的肯定的而且有两种方法:
方法1:
在tars的服务模板文件中:
该路径下添加对应的环境变量即可:
<tars>
<application>
<server>
env=HOST=http://test.com;|JAVA_HOME=/usr/local/jdk-1.8
tarsnode在拉起服务是会将这里配置的环境变量以export 的方法添加到tars_start.sh (tarsnode为服务生成的启动脚本),例如以上的环境变量你在tars_start.sh 将会看到:
export HOST=http://test.com
export JAVA_HOME=/usr/local/jdk-1.8
该方法的优点: 不同的环境只需要配置不同的模板即可,简单,方便
缺点 : 不能使用自定义的启动脚本。
方法2:
自定义服务启动脚本,然后在启动脚本中加入自己需要的环境变量,同样可以达到目的。
该方法的缺点就是不同的环境得指定不同的start.sh脚本。
关于环境变量,由于业务进程是由tarsnode进程拉起的,所以业务进程的环境变量默认会继承tarsnode进程的环境变量,所以如果在tarsnode进程启动之后,在通过其他一些方法设置系统环境变量此时是不会被tarsnode加载传到业务进程的。除非启动tarsnode进程。
大家有关于tars 的环境变量的一些好的建议、问题都可以进行探讨学习~
閱讀更多 後臺開發深度探索 的文章