Назад | Перейти на главную страницу

Как мне прочитать файл pid в cfengine?

Как мне прочитать файл pid в cfengine 3 и перезапустить этот процесс, если он не запущен?

В 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, поэтому вам, возможно, придется адаптировать его к вашим потребностям и распространению.

Вы можете скачать этот фрагмент кода здесь.