如果 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 脚本,因此您可能需要根据您的需求和分布对其进行调整。