如何读取 cfengine 中的 pid 文件?

如何读取 cfengine 中的 pid 文件?

如果 cfengine 3 中没有运行,我该如何读取 pid 文件并重新启动该进程?

答案1

在 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”。然后将运行 init 脚本以确保它启动。参见cf3 参考手册以获得关于 restart_class 如何工作的更深入的解释。

答案2

我不会直接查看 PID 文件,而是尝试让 Cfengine 3 管理您选择的服务/进程。对于 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 脚本,因此您可能需要根据您的需求和分布对其进行调整。

您可以在此处下载此代码片段。

相关内容