我正在阅读《Ubuntu Server Book 第二版》。其中有如下内容:
目前,Upstart 确实取代了 init 和 /etc/inittab 文件的功能,并管理对运行级别、系统启动和关闭、控制台 tty 的更改,并且越来越多的核心功能正在移植到 Upstart 脚本中
我的看法是,upstart 负责在运行级别上启动脚本。因此,如果输入了运行级别 2,则 Upstart 而不是 System V 会启动脚本,然后启动可执行程序。
因此,我从存储库安装了 postgresql。而且,当系统启动时,postgres 守护进程确实在后台运行。显然,如果 System V 没有执行此操作,那么一定是 Upstart 执行了此任务。但是,当我转到 /etc/init(所有 upstart 脚本所在的位置)时,任何地方都没有对 postgresql 的引用。但是,当我转到 /etc/rc1.d(运行级别 1 脚本所在的位置)时,我确实找到了一个 postgresql 脚本:
$ ls -l | grep postgresql
lrwxrwxrwx 1 root root 20 Jun 1 11:10 K21postgresql -> ../init.d/postgresql
那么为什么postgresql没有upstart脚本呢?如果没有upstart脚本,postgresql如何启动呢?
答案1
对于版本 14 来说,是;对于版本 15 来说,不是。
在 Ubuntu Linux 版本 14 上:是的,upstart 确实处理了所有这些问题。您需要阅读食谱讨论了它如何处理仅随旧 System 5rc
脚本提供的程序,以及 upstart “运行级别”事件的手册页。有一整套机制用于调用旧 System 5rc
程序。就 upstart 本身而言,这只是另一项工作。
在 Ubuntu Linux 版本 15 上;不,upstart 不再参与。systemd 正在处理所有这些。systemd 具有针对旧 System 5rc
脚本的机制。但是,/etc/init.d/postgresql
您正在查看的文件与版本 15 无关。PostgreSQL 在版本 15 中附带两个 systemd 服务单元文件,并且。因此,System 5 的内容被完全忽略。/lib/systemd/system/[email protected]
/lib/systemd/system/postgresql.service
rc
进一步阅读
- 詹姆斯·亨特和克林特·拜伦(2014年)。 “
rc
工作”。 新贵食谱。 runlevel
. §7. Ubuntu 14.04 版手册页。Canonical。- https://unix.stackexchange.com/a/200281/5132
- https://superuser.com/a/912648/38062
- https://askubuntu.com/a/617869/43344
- https://askubuntu.com/a/613814/43344