在第一次学习 SMF 之后,我正在学习 Upstart。
当然,我假设它们实现相同的目的,但我知道这是我错的地方。
理想情况下,我希望有人写了一个比较,这样我就不必挖掘 Upstart 中不存在的功能。Solaris 有一个叫做 Contract Subsystem 的东西,它内置在内核中,这实际上是启用 SMF 中大部分功能的原因。我知道在 Linux 中可能没有等价物,这可能是我无法弄清楚在服务停止以及服务监控和故障重启方面我可以从 Upstart 期望什么的原因。
更具体地说明我在 Upstart 中无法真正弄清楚的事情:
停止。对于 SMF,我几乎习惯于让 SMF 执行停止过程。我从来没有真正写过特定的终止脚本,我不需要跟踪 PID,我不需要知道一个进程产生多少次等等。这在 Upstart 中更像是一个 DIY 过程。正确的 ?
失败时重启。我真的不明白这是否是 Upstart 的功能。我看到 Linux 人员将 Upstart 与某种类型的用户进程监控机制相结合。也许这就是我应该做的?
观看。我喜欢 SMFsvcs -p <servicename>
命令,它允许我查看(当前)属于服务的所有进程。在 Upstart 中,在我看来“服务”=“进程”意味着在 Upstart 中initctl status <jobname>
命令将始终只显示一个进程。如果我有一个从操作系统的角度来看是两个独立进程的服务怎么办?
保证只有一个实例。对于大多数守护进程,您确实希望确保只有一个已启动的实例。对于某些服务,即使尝试启动第二个实例也可能是致命的。我想告诉 Upstart 并让 Upstart 向我保证这一点。因此,即使操作员执行service xyz start
并且xyz
已经在运行它也不应该导致尝试启动另一个实例,xyz
也不应该导致尝试重新启动xyz
。我可以这样做吗?
委托。通过 SMF,我将某些服务的责任委托给非特权用户。例如,我有一小组非特权用户已被授予启动/停止他们自己的端口 80 网络服务器的权利。为此,我为此服务分配了权限,以便能够绑定到特权端口 (portno<1024), 而无需为该服务分配任何其他类似 root …