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 <[email protected]>:
> On Wed, Nov 10, 2010 at 3:53 PM, Sandra Wittenbrock
> <[email protected]> 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
> [email protected]
> https://cfengine.org/mailman/listinfo/help-cfengine
>
--
SY, Seva Gluschenko.
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine