joeforker Asked: 2010-03-23 10:06:48 +0800 CST2010-03-23 10:06:48 +0800 CST 2010-03-23 10:06:48 +0800 CST 如何在 cfengine 中读取 pid 文件? 772 如何在 cfengine 3 中读取 pid 文件并在该进程未运行时重新启动该进程? cfengine 2 个回答 Voted Fanatic 2011-05-30T12:05:53+08:002011-05-30T12:05:53+08:00 在 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”。然后将运行初始化脚本以确保它启动。有关 restart_class如何工作的更深入解释,请参阅cf3 参考手册。 PythonLearner 2012-08-12T02:11:50+08:002012-08-12T02:11:50+08:00 我不会直接查看 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 脚本,因此您可能需要根据您的需要和分发对其进行调整。 您可以在此处下载此代码段。
在 cfengine 2 中,我使用了类似的东西:
在 cfengine 3 中,重新启动进程必须编码为单独的命令。
如果 httpd 没有运行,这将定义类“start_httpd”。然后将运行初始化脚本以确保它启动。有关 restart_class如何工作的更深入解释,请参阅cf3 参考手册。
我不会直接查看 PID 文件,而是尝试让 Cfengine 3 管理您选择的服务/进程。对于 Cfengine 3,您可以使用以下代码(它可能并不完美,但它可以工作):
请注意,我为 Ubuntu 客户端编写了这个 Cfengine 3 脚本,因此您可能需要根据您的需要和分发对其进行调整。
您可以在此处下载此代码段。