#!/bin/bash # # .---. . . # | | | # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-' # ' ' --' --' -' - -' ' ' -' -' -' ' - --' # # Freedom in the Cloud # # Watchdog functions to keep systems running even if they crash # systemd itself can handle this, but some debian packages are in # twilight world where they still use the older init scripts # # License # ======= # # Copyright (C) 2014-2016 Bob Mottram # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # name of a script which keeps running processes going even if they crash WATCHDOG_SCRIPT_NAME="keepon" function install_watchdog_script { if [[ $(is_completed $FUNCNAME) == "1" ]]; then return fi echo '#!/bin/bash' > /usr/bin/$WATCHDOG_SCRIPT_NAME echo 'LOGFILE=/var/log/keepon.log' >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo 'CURRENT_DATE=$(date)' >> /usr/bin/$WATCHDOG_SCRIPT_NAME # application specific stuff is added later chmod +x /usr/bin/$WATCHDOG_SCRIPT_NAME function_check cron_add_mins cron_add_mins 1 "/usr/bin/$WATCHDOG_SCRIPT_NAME" mark_completed $FUNCNAME } function add_watchdog_daemon { daemon_name=$1 echo '' >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo "# keep ${daemon_name} daemon running" >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo "RUNNING=$(pgrep ${daemon_name} > /dev/null && echo Running)" >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo 'if [ ! $RUNNING ]; then' >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo " systemctl start ${daemon_name}" >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo ' echo -n $CURRENT_DATE >> $LOGFILE' >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo " echo \"${daemon_name} daemon restarted\" >> \$LOGFILE" >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo 'fi' >> /usr/bin/$WATCHDOG_SCRIPT_NAME echo "# End of ${daemon_name}" >> /usr/bin/$WATCHDOG_SCRIPT_NAME } function remove_watchdog_daemon { daemon_name=$1 sed -i "/# keep ${daemon_name} daemon running/,/# End of ${daemon_name}/d" /usr/bin/$WATCHDOG_SCRIPT_NAME } # NOTE: deliberately no exit 0