我们登录后,rc.local 是否会执行其命令?
由于 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
调用:systemd
rc-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
文档。)