Alexey, take it easier

Usually if you're restarting a service upon its configuration file(s)
change, you put those files under Cfengine management as well, so that
Sandra's question about files is being solved pretty easy like

files:
    "/etc/ssh/sshd_config"
           copy_from   => my_scp("$(sys.workdir)/conf/sshd"),
           classes        => if_repaired("sshd_reconfigured");

processes:
    sshd_reconfigured::
        "sshd"
             signals            => { "hup" },
             process_select => listening_sshd,
             restart_class    => restart_sshd;

I left body process_select listening_sshd for your homework exercises ;)

2010/11/11 Aleksey Tsalolikhin <atsaloli.t...@gmail.com>:
> On Wed, Nov 10, 2010 at 3:53 PM, Sandra Wittenbrock
> <san...@hpcrd.lbl.gov> wrote:
>> Hi,
>>
>> What would be the command to make sure a service (sysctl, firewall, etc)
>> is running, and/or restart it when cfengine updates the config files?
>
> Here is what I use on a Linux server - if somebody has a better way, I would
> love to hear it:
>
> a) how to make sure a service is running:
>
> check that CUPS (printer service) is running by checking the "ps" output, and
> if regex match for "cups" fails, restarting cups:
>
> --- start cfengine config ----
> body common control
>
> {
> bundlesequence  => { "check_cups_running"  };
> }
>
>
> ########################################
>
>
> bundle agent check_cups_running {
>
>
>    processes:
>
>            "cupsd"
>
>                restart_class => "start_cups";
>                # restart_class sets up a class if the regex match FAILS
>
>    commands:
>
>        start_cups::
>
>                "/etc/init.d/cups start";
>
> }
>
> --- end cfengine config file ---
>
> It just occurred to me that a more reliable test would be to pretend
> to be a client for that service and to try to connect to it, and if it
> fails then to try to restart.  (more reliable because if there is
> another process in the process table, let's say a program called
> mycupsarefull, but cups is not running, cfengine will not proceed to
> restart CUPS)
>
> but anyway, the above does work and should help you start, Sandra
>
> now, question b: how to restart a service if it's config file was
> recently updated
>
> correct me if I'm mistaken, but there is presently no way in cfengine
> to natively test if a file modification time is less than 10 minutes,
> let's say.  there is function isnewerthan() but it can only compare
> two files, not a file and a time period.
>
> Hence, I use:
>
> (the following is an example for restarting haproxy if
> /etc/haproxy.conf was recently updated.  )
>
> --- start cfengine config ----
>
>
>
> body common control
>
> {
> bundlesequence  => {
> "restart_load_balancer_if_load_balancer_config_recently_updated"  };
> inputs => { "cfengine_stdlib.cf" };
>
> }
>
> bundle agent restart_load_balancer_if_load_balancer_config_recently_updated
> {
>
> commands:
> load_balancer_hosts::
> "/usr/bin/find  /etc/haproxy.conf  -mmin -10 | /bin/grep haproxy.conf
>>/dev/null && /usr/bin/pkill
> haproxy && /usr/local/sbin/haproxy -f /etc/haproxy.conf || exit 0"
> contain => in_shell;
>
>
> }
>
> --- end cfengine config ----
>
> note:  i tried using "pkill -HUP haproxy" orriginally but this didn't
> seem to work...  I have to
> research what haproxy does when it gets SIGHUP.  in this example, I
> stop and start
> the proxy.  normally, I'd expect pkill -HUP to be sufficient to reload
> the config.
>
>
> Hope this helps!
> Best,
> -at
> _______________________________________________
> Help-cfengine mailing list
> Help-cfengine@cfengine.org
> https://cfengine.org/mailman/listinfo/help-cfengine
>



-- 
SY, Seva Gluschenko.
_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to