linux脚本启三个tomcat,Tomcat 自启动环境参数的设置及 Linux 脚本的启动顺序

问题描述:

最近 在做Tomcat优化(Tomcat 字符编码,Apr & Tomcat-Native安装) 时,遇到一个自启动环境参数的问题。本次优化需要设置:export LC_ALL=en_US.UTF-8export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib 这两个Tomcat 的环境参数,最初设置在/etc/default/locale  和  etc/profile 文件末尾,和Java 环境变量在一起, 手动启动Tomcat 都能生效。 当 tomcat 在 /etc/rc.local 下设置为 自动时,环境变量不能生效。最后在 又在/etc/rc.local 文件中 Tomcat 自启动命令设置之前 再次设置 这两个环境参数优化才生效。也可以将这两个环境参数 和 java环境变量 设置在 Tomcat 的启动脚本 catalina.sh 中。 当然这都不是 很好的 方式,下面有详细说明。

问题说明:

1.  Linux 脚本启动的顺序

可以参考 文章http://my.oschina.net/emptytimespace/blog/77968。 我们可以看到 rc.local 脚本的执行顺序在 profile 之前。 所以在profile 中设置的 环境参数在 rc.local中无法使用。

第一步:通过/boot/vm进行启动 vmlinuz

第二步:init /etc/inittab第三步:启动相应的脚本,并且打开终端

rc.sysinit

rc.d(里面的脚本)rc.local

第四步:启动login登录界面 login

第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的

/etc/profile.d/file

/etc/profile/etc/bashrc/root/.bashrc/root/.bash_profile

1, init是所有过程的顶层,init读取/etc/inittab配置

2, init调用执行/etc/inittab配置的/etc/rc.d/rc.sysinit脚本

3, rc.sysinit按照inittab执行/etc/rc__.d/目录下的各个脚本

4,大多数启动脚本搁置在 /etc/rc.d/init.d下(/etc/init.d是到/etc/rc.d/init.d/的符号链接)

rc__.d中__是init.d中脚本的符号链接,命名格式是:

S{number}{name}

K{number}{name}

S末尾的文件向脚本传递start参数

K末尾的文件向脚本传递stop参数

number决议执行的步伐

其中有文件:S99local 为 ../rc.local(即/etc/rc.d/rc.local的符号衔接)

2.  Linux 脚本说明

有人提到了 也可以在 etc/enviroment 中设置 环境变量。 这里我们可以看下 环境参数脚本启动顺序(Debian):

/etc/environment -> /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout 。可以参考 文章http://my.opera.com/lsds/blog/linux

这里的启动顺序是指系统启动顺序,只加载一次。用户登录时环境变量加载顺序为 :

/etc/profile => [/etc/environment] => (~/.bash_profile | ~/.bash_login | ~/.profile)  =>  ~/.bashrc  =>  (/etc/bash.bashrc | /etc/bashrc) => ~/.bash_logout。

(1)/etc/environment:此配置文件设置基本的PATH变量,及系统当前语言变量,虽然比较短,但却在系统启动中占据举足轻重的作用,提倡用于设置全局环境变量,仅debain系列发行版(如Ubuntu)才有。

(2)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

(3)/etc/bash.bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。Redhat系列发行版是bashrc,Debian系列发行版是bash.bashrc。

(4)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

(5)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(6)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。

(7)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

3. 环境变量的三种方式

在/etc/profile中设置,这是全局的, 需要重新登录,或者 执行source /etc/profile生效。在用户目录下的~/.bashrc中设置,这是针对单个用户的,需要重新登录生效。直接在shell 终端下,使用shell命令设置,针对当前终端的,关闭shell终端后,失效。

综上: rc.local是以UID 0的身份运行的,这里指内核启动,爆发在登录之前。因此用户登录不能继承这里所设置的环境变量,所以需要在/etc/profile设置。rc.local 是系统初始化的最后一步,然后才是加载用户环境参数。etc/enviroment 是系统环境变量。 etc/profile 是用户环境变量。 如果两者重复,以etc/profile 为准。这两个设置后,对所有用户都有效。

设置环境变量注意:1.采用 冒号 “:” 分隔Linux 路径;2.$PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值,export 时不能覆盖;3. 注意CLASSPATH中的当前目录“.”;4.需要用export命令导出为全局变量;5. 严格区分大小写。

解决方案:

1.   不能在rc.local中设置环境变量,用户无法继承2.   不能只在 profile中设置,这样 rc.local 中自启动的程序无法获取 环境变量。同时针对所有用户,生产中有安全问题3.   不建议只在 Tomcat 启动脚本中设置,这样其他程序无法复用

推荐方案:

1. 编写Tomcat 自启动shell 脚本,脚本中 设置 Tomcat 需要的 环境变量,同时启动 Tomcat

2. 在rc.local 中执行 在第一步 中编写的脚本。3. 在指定用户主目录下 的 .bashrc 文件中 设置用户 Java 环境变量,当用户每次登陆时加载 或者当前用户下执行 shell 时也会加载

注:这里针对的Linux 系统适用于 redhat 和 debian 系列的系统。 脚本文件名称和路径稍有变化,请注意。

如果有错误的地方和不完备的地方,请大家补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值