我全新安装了 Ubuntu 14.04,没有触碰过任何东西。
据和报道,Cups 正在ps
运行netstat
。
有/etc/init/cups.conf
和/etc/init.d/cups
,两个好像都可以开杯。
我使用以下方法来确定哪个 init 守护进程启动了 cups:
service cups status
- “未知职业:杯子”initctl status cups
- “未知职业:杯子”/etc/init.d/cups status
— “cupsd 正在运行”- 运行级别为 2,并且没有 cups
/etc/rc2.d
那么问题是:哪个 init 守护进程启动了 cups?是传统的 Debian init 还是 upstart?
如果 upstart 是启动 cups 的人,为什么initctl status cups
不能报告 cups 状态?
答案1
Ubuntu 上的 CUPS 由 Upstart 通过文件 /etc/init/cups.conf 启动。文件 /etc/init.d/cups 被忽略。/etc/init/cups.conf 不是 init 脚本,而是 Upstart 的配置。它确实启动了主守护进程,并且不仅是 CUPS 的前置和后置配置。
当在环境中设置变量 UPSTART_SESSION 时,service
和实用程序会报告未知作业,因为在这种情况下,这两个实用程序作用于initctl
会话初始化而不是系统初始化(cups是由系统初始化启动的)。su
通常会保留环境,而sudo
不会,所以sudo initctl status cups
会起作用但su -c "initctl status cups"
不会。
答案2
在这两者中,只有一个实际上是 init 脚本:/etc/init.d/cups
。该/etc/init/cups.conf
文件似乎是一个配置文件,在守护进程启动之前/之后运行某些操作,但它本身并不是 init 脚本。它缺乏正确的格式(启动、停止、重新启动等功能),而且无论如何,它不在正确的位置。Init 脚本位于目录中init.d
。
至于是谁开始的,14.04 仍然在使用 upstart,他们会迁移至 systemd供将来版本使用。因此,upstart 启动了 cups 守护进程。
现在,至于为什么service
nor都没有initctl
返回任何有用的信息,那是因为您没有使用sudo
:
terdon@16:~$ service cups status
status: Unknown job: cups
terdon@16:~$ sudo service cups status
[sudo] password for terdon:
cups start/running, process 1319
terdon@16:~$ initctl status cups
initctl: Unknown job: cups
terdon@16:~$ sudo initctl status cups
cups start/running, process 1319