rc.local启动问题(环境变量)

Linux系统启动顺序:

第一步: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

在rc.local中添加自定义的脚本

  1. 将自定义的脚本xx.sh放置在/etc/rc.d/init.d/中
  2. 将脚本放在/usr/bin/中
  3. 在/etc/rc.local中加上脚本的执行语句:
    sh /usr/bin/xx.sh >> /var/log 2>&1
    ps : 2>&1表示将标准输出和标准错误重定向到日志中
    source xxx.sh 方式,在当前环境中执行脚本,脚本中设置的环境变量也会在当前环境中生效
    Sh xxx.sh 方式,会新启动一个子进程执行脚本,脚本中设置的环境变量在父环境中不会存在。

rc.local不一定能成功启动脚本

rc.local is a file, owned by root.root and should be mode 755. The rc.local file is for initialization of programs after the system has fully booted. This script is run right before login prompts are displayed. You can use the file to run last minute startups, set certain environment variables, etc.
Conversely, if you want to start something before everything else, you would use the regular file in /etc/rc.d called rc.sysinit, which should have the same owner and permissions.

这说明rc.local运行在操作系统完全引导成功,但是尚未启动login shell之前。
比如我们可以在rc.local中加入env把环境变量打印出来,可以看到环境变量非常少。
如果我们在/etc/profiles或bashrc中配置了环境变量,xx.sh依赖这些环境变量,由于rc.local执行阶段看不到这些环境变量,所以会执行失败。
该问题的解决办法:在rc.local中在xx.sh命令之前加上export。

几种方式可以让我们在任何目录下执行某个命令

首先要认识到能到任何目录下执行某个命令的原理,系统会读取PATH这个环境变量的内容,然后去挨个路径下查找,默认PATH路径下有/usr/bin等。所以我们可以用以下两种方式:

  1. 将命令拷贝到/usr/bin下
  2. 将命令所在路径添加到环境变量PATH中。

Linux中修改环境变量及生效方法(永久、临时)

在这里插入图片描述

永久生效

修改/etc/profile, /etc/bashrc都能让环境变量设置永久生效,但是不建议使用。
~/.bash_profile 或~/.bashrc对当前用户有效。
修改完之后用source命令让修改生效,如:

source .bash_profile  

临时有效

直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】

在shell的命令行下直接使用[export 变量名=变量值]定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义

例如:export PATH=/usr/local/webserver/php/bin:$PATH

shell login和non-login

login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,我们登陆 tty1 ~ tty6 时,需要输入用户的账号与密码,此时取得的 bash 就称为“ login shell ”;

 login shell会读取这两个文件:
 /etc/profile:这是系统整体的配置,一般尽量不要修改这个文件;
~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,需要修改自己的数据,就写入这些文件!(注意:其实 bash 的 login shell 配置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。)

non-login shell:取得 bash 接口的方法不需要重复登陆的举动,比如我们登陆 Linux 后, 启动终端Terminal,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell了。又或者你在原本的 bash 环境下再次使用 bash 这个命令,建立了一个bash子进程,同样的也没有输入账号密码, 那第二个 bash (子程序) 也是 non-login shell 。

non-login shell读取:
当然了,还有一些比如/etc/man.config、~/.bash_history、~/.bash_logout等文件也会影响bash的操作,有兴趣的朋友可以再扩展学习。这里我们主要介绍这部分的重点。

rc.local 启动注意事项

使用rc.local 调用进程和脚本时,推荐后台启动,原因是如果进程和脚本异常导致不退出,那rc.local也不会执行完退出,导致系统开启启动卡在rc.local中,不能正常进入系统,这种情况要进入单例模式修改rc.local,再进入正常模式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值