Only restart services when the corresponding file has been modified recently

This commit is contained in:
Aaron Bieber 2019-10-21 21:07:00 -06:00
parent 7d6e339e08
commit 44a7cb6f5a
Signed by: qbit
GPG Key ID: 279160AB1BE1236B
4 changed files with 35 additions and 10 deletions

View File

@ -86,8 +86,14 @@ The options are as follows:
> An optional file that contains a list of services to enable on the remote > An optional file that contains a list of services to enable on the remote
> host. > host.
> If a service is already enabled, it will be restarted each run of > Each line in the file should contain "name:path".
> **boxctl**. > Where "name" is the name of a service (httpd for example) and "path" is the
> full path to a file that when modified, should trigger a restart of the named
> service.
> For example, the entry "httpd:/etc/httpd.conf" would restart
> httpd(8)
> if the mtime on "/etc/httpd.conf" is less than 100 seconds from the current
> time.
*$CWD/groups* *$CWD/groups*

View File

@ -69,10 +69,19 @@ EOF
) )
SERVICE_START_RESTART=$(cat <<EOF SERVICE_START_RESTART=$(cat <<EOF
/usr/sbin/rcctl enable %s; \ /usr/sbin/rcctl enable %s;
/usr/sbin/rcctl check %s && \ if /usr/sbin/rcctl check %s; then
/usr/sbin/rcctl restart %s || \ AGE=\$(stat -s %s | awk -v now=\$(date +%%s) \
'{split(\$10,a,"="); print now - a[2]}')
if [ \$AGE -lt 100 ]; then
logger -t boxctl "restarting %s (\$AGE seconds old)"
/usr/sbin/rcctl restart %s
else
logger -t boxctl "not restarting %s (\$AGE seconds old)"
fi
else
/usr/sbin/rcctl start %s /usr/sbin/rcctl start %s
fi
EOF EOF
) )
@ -258,10 +267,14 @@ fi
if [ -f ./services ]; then if [ -f ./services ]; then
msg 0 "enabling services $(wc -l services | awk '{print $1 " " $2}')" msg 0 "enabling services $(wc -l services | awk '{print $1 " " $2}')"
local _svc _chfile
for service in $(cat services); do for service in $(cat services); do
msg 1 "\tenabling/restarting ${service}" read _svc _chfile <<EOF
$(echo $service | sed 's/:/ /g')
EOF
msg 1 "\tenabling/restarting ${_svc}"
cmd="$(printf "$SERVICE_START_RESTART" \ cmd="$(printf "$SERVICE_START_RESTART" \
$service $service $service $service)" $_svc $_svc $_chfile $_svc $_svc $_svc $_svc)"
_ssh ${RUN_USER}@${SERVER} "${cmd}" _ssh ${RUN_USER}@${SERVER} "${cmd}"
done done
fi fi

View File

@ -1 +1 @@
httpd httpd:/etc/httpd.conf

View File

@ -83,8 +83,14 @@ If this file does not exist, no files are copied.
.It Pa $CWD/services .It Pa $CWD/services
An optional file that contains a list of services to enable on the remote An optional file that contains a list of services to enable on the remote
host. host.
If a service is already enabled, it will be restarted each run of Each line in the file should contain "name:path".
.Nm . Where "name" is the name of a service (httpd for example) and "path" is the
full path to a file that when modified, should trigger a restart of the named
service.
For example, the entry "httpd:/etc/httpd.conf" would restart
.Xr httpd 8
if the mtime on "/etc/httpd.conf" is less than 100 seconds from the current
time.
.It Pa $CWD/groups .It Pa $CWD/groups
A ":" delimited list of groups to be added to the remote host. A ":" delimited list of groups to be added to the remote host.
Entries should follow a "group:gid" pattern. Entries should follow a "group:gid" pattern.