From 53fac7e7cc44ca90e9041e9e9b4d4a01006ff1bb Mon Sep 17 00:00:00 2001 From: Pantelis Roditis Date: Fri, 19 Apr 2024 03:04:45 +0300 Subject: [PATCH 1/2] shell script for health checking events --- contrib/mysql-events-checker.sh | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 contrib/mysql-events-checker.sh diff --git a/contrib/mysql-events-checker.sh b/contrib/mysql-events-checker.sh new file mode 100644 index 000000000..539bdc3d2 --- /dev/null +++ b/contrib/mysql-events-checker.sh @@ -0,0 +1,76 @@ +#!/bin/sh +# +# Check a given database for events disabled +# more than a given number of seconds (300 default). +# + +## default values modify as you please +DATABASE="echoCTF" +INTERVAL=300 +VERBOSE=0 +ENABLE=1 + + +usage () { + echo -e "\t\tMySQL events checker" + echo -e "\t\t--------------------\n" + echo "usage: $0 [-ehv] ] [-d database] [-i interval]" + echo " -h this help" + echo " -v verbose output (default: disabled)" + echo " -e dont enable events that are disabled (default: enable)" + echo " -d database check events for the given database (using: ${DATABASE})" + echo " -i interval check for events disabled longer than interval in seconds (using: ${INTERVAL})" + echo +} + + +OPTSTRING=":vehd:i:" + +while getopts ${OPTSTRING} opt; do + case ${opt} in + d) + DATABASE="${OPTARG}" + ;; + i) + INTERVAL="${OPTARG}" + ;; + v) + VERBOSE=1 + ;; + e) + ENABLE=0 + ;; + h) + usage + exit 0 + ;; + :) + echo "Option -${OPTARG} requires an argument." + echo + usage + exit 1 + ;; + ?) + echo "Invalid option: -${OPTARG}." + echo + usage + exit 1 + ;; + esac +done + +if [ $VERBOSE -ne 0 ]; then + echo "Using database: ${DATABASE}" +fi + +for _ev in $(mysql -NBe "SELECT CONCAT('${DATABASE}.',EVENT_NAME) from INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA='${DATABASE}' AND STATUS='DISABLED' AND (UNIX_TIMESTAMP(LAST_ALTERED)+${INTERVAL}) Date: Fri, 19 Apr 2024 03:05:08 +0300 Subject: [PATCH 2/2] update the db playbook to include the checker by default --- ansible/runonce/db.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/ansible/runonce/db.yml b/ansible/runonce/db.yml index 5c2602bb2..6c6fed3ff 100644 --- a/ansible/runonce/db.yml +++ b/ansible/runonce/db.yml @@ -73,7 +73,7 @@ kern.maxfiles: 312180 rcctl: - { name: check_quotas, state: "disable" } - - { name: cron, state: "disable" } + - { name: cron, state: "enable" } - { name: resolved, state: "disable" } #- { name: dhcpleased, state: "disable" } - { name: ntpd, state: "enable" } @@ -128,6 +128,12 @@ content: "{{ myname }}\n" dest: /etc/myname + - name: Copy events checker + template: + src: "{{playbook_dir}}/../../contrib/mysql-events-checker.sh" + mode: 0555 + dest: /usr/local/sbin/mysql-events-checker + - name: Create fresh /etc/hosts copy: content: "127.0.0.1 localhost\n{{db_ip}} {{ myname.split('.')[0] | lower }} {{ myname }}\n" @@ -387,5 +393,15 @@ failed_when: result.rc not in [0,2] register: result + - name: Install cron entries + cron: + name: "{{item.name}}" + user: "root" + minute: "{{item.minute | default(omit)}}" + special_time: "{{item.special_time|default(omit)}}" + job: "{{item.job}}" + with_items: + - { name: "events checker", minute: "*/1", job: "/usr/local/sbin/mysql-events-checker" } + - name: display post install message debug: msg="Reboot the system for the changes to take effect"