我如何阅读cfengine中的pid文件?

如何在cfengine 3中读取一个pid文件,并在没有运行的情况下重新启动该进程?

在cfengine 2中,我使用了类似于:

processes: "httpd" restart "/etc/init.d/apache restart" 

在cfengine 3中,重新启动进程必须被编码为一个单独的命令。

 processes: "httpd" restart_class => "start_httpd"; commands: start_httpd:: "/etc/init.d/apache restart"; 

如果httpd没有运行,这将定义类“start_httpd”。 然后将运行初始化脚本,以确保它启动。 请参阅cf3参考手册以深入了解restart_class的工作原理。

我不想直接看PID文件,而是试着让Cfengine 3pipe理你select的服务/进程。 对于Cfengine 3,你可以使用下面的代码(它可能不是完美的,但它的工作原理):

 body common control { version => "1.0"; bundlesequence => { "check_services" }; } bundle agent check_services { vars: "services" slist => { "apache2", "mysql" }; "init_scripts_path" string => "/etc/init.d"; processes: "$(services)" comment => "Check if the processes for '$(services)'", restart_class => "restart_$(services)"; commands: "${init_scripts_path}/${services} start" comment => "Restarting the service", ifvarclass => "restart_${services}"; } 

请注意,我为Ubuntu客户端编写了Cfengine 3脚本,因此您可能需要根据您的需求和发行版​​来调整它。

你可以在这里下载这个代码片段。