可以在 rc.local 中设置 LIB 路径吗?我们登录后它会执行其命令吗?

可以在 rc.local 中设置 LIB 路径吗?我们登录后它会执行其命令吗?
  1. 我们登录后,rc.local 是否会执行其命令?

  2. 由于 rc.local 在多用户运行级别完成后执行其命令,这是否也意味着我们可以/应该在其中设置 LIB 路径而不是在 .bashrc 中设置它们?

答案1

该脚本/etc/rc.local在正常系统启动结束时调用。它以 的身份执行root,与用户登录没有任何关系。 中的任何环境变量分配/etc/rc.local仅适用于 启动的进程/etc/rc.local;它们不适用于用户登录会话中启动的进程。

/etc/rc.local对用户的登录会话没有直接影响。它通常用于挂载某些磁盘、启动某些服务等任务。它不能用于设置用户的环境。

首先,我们来看一下/etc/rc.local它本身:

$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

rc.local是类 Unix 系统的一个老特性,甚至比 System V 初始化系统(使用目录的系统/etc/rc[0-6S].d)还要老。最近的 Ubuntu 系统使用systemd控制初始化;由以下单元/etc/rc.local调用:systemdrc-local.service

$ sudo systemctl status rc-local
● rc-local.service - /etc/rc.local Compatibility
   Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled)
   Drop-In: /lib/systemd/system/rc-local.service.d
       └─debian.conf
   Active: active (exited) since Fri 2017-04-28 17:44:18 EEST; 2 days ago

Apr 28 17:44:18 factissa systemd[1]: Starting /etc/rc.local Compatibility...
Apr 28 17:44:18 factissa systemd[1]: Started /etc/rc.local Compatibility.

如果文件/etc/rc.local存在,则该单元在启动时自动生成,并且默认设置为在实现后调用network.target;在 Debian 和衍生产品(如 Ubuntu)上,插入配置文件会对此进行修改,以便在之后运行该单元network-online.target

/etc/rc.local这与传统的多用户运行级别初始化结束时的位置并不完全相同,但足够相似,因此在大多数情况下不需要进行任何调整。(查看这些文件,它们是文本,非常容易理解;要进行修改,请先阅读systemd文档。)

相关内容