Как мне прочитать файл pid в cfengine?
Как мне прочитать pid-файл в cfengine 3 и перезапустить этот процесс, если он не запущен?
2 ответа
В 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";
Это определит класс "start_httpd", если httpd не запущен. Затем запустите сценарий инициализации, чтобы убедиться, что он запускается. См. Справочное руководство cf3 для более глубокого объяснения того, как работает restart_class.
Вместо того, чтобы смотреть непосредственно на файл 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}";
}
Обратите внимание, что я написал этот сценарий Cfengine 3 для клиента Ubuntu, поэтому вам, возможно, придется адаптировать его к вашим потребностям и распределению.