在第一次学习 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 …
我正在尝试让 IP 过滤器在 Solaris 11.1 上工作。
我正在关注官方的Solaris 11.1 指南。
当主机启动时,它没有选择ipf.conf
我期望的。以下是内容 svccfg -s ipfilter:default listprop
:
config application
config/ipf6_config_file astring /etc/ipf/ipf6.conf
config/ipnat_config_file astring /etc/ipf/ipnat.conf
config/ippool_config_file astring /etc/ipf/ippool.conf
firewall_config_default com.sun,fw_configuration
firewall_config_default/apply_to astring
firewall_config_default/exceptions astring
firewall_config_default/open_ports astring
firewall_config_default/value_authorization astring solaris.smf.value.firewall.config
firewall_config_default/version count 1
firewall_config_default/policy astring custom
firewall_config_default/custom_policy_file astring /etc/ipf/ipf.conf
firewall_config_override com.sun,fw_configuration
firewall_config_override/apply_to astring
firewall_config_override/policy astring none
firewall_config_override/value_authorization astring solaris.smf.value.firewall.config
general framework
general/complete astring
general/enabled boolean true
restarter framework NONPERSISTENT
restarter/logfile astring /var/svc/log/network-ipfilter:default.log
restarter/contract count 7951
restarter/start_pid count 4031
restarter/start_method_timestamp …
Run Code Online (Sandbox Code Playgroud) 我有 smartos 机器将自定义应用程序作为 smf 服务(一个 circonus 监控代理)运行。在其中一些机器上,代理在启动时出错并卡在重启循环中,最终导致机器崩溃。对于我使用过的所有其他 smf 服务,它们将在重新启动几次后进入“维护”模式,但此特定服务似乎从未如此。我在 smf 清单中看不到任何调整这些设置的方法,我在 oracle 文档中也没有找到太多关于它的信息。有谁知道这是否是可配置的设置,如果是,我在哪里可以找到它?
SMF 清单定义了以下重启方法:
<exec_method name='restart' type='method' exec=':kill -HUP' timeout_seconds='10'/>
Run Code Online (Sandbox Code Playgroud)