Не перезапускайте службу более 1 раза в течение 60 секунд. - PullRequest
0 голосов
/ 04 октября 2018

У меня есть скрипт, который перезапускает службу httpd в случае изменения файла, как реализовать контроль скорости, чтобы перезапустить службу только один раз в течение 60 секунд

Я имею представление, что делать:

сравнитьтекущее время со временем, когда был изменен log.txt, но не знаю, с чего начать

#!/bin/bash

mypidfile=/var/run/filewatch.pid

trap "rm -f $mypidfile" EXIT

echo $$ > "$mypidfile"


stdbuf -oL inotifywait -m /home/centos -r -e modify > log.txt |
    while read path action file >> log.txt; do
        if [[ "$file" =~ .*py$ ]] || [[ "$file" =~ .*css$ ]] || [[ "$file" =~ .*html$ ]] || [[ "$file" =~ .*js$ ]] ; then # Does the file end with .py css html js
            systemctl restart httpd # If so, do your thing here!
            #touch /home/centos/log.txt
            echo "test"
        fi
    done

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Благодаря совету @Kamil Cuk я решил проблему:

inotifywait -m /home/centos -r -e modify |
    while read path action file>>log.txt; do
        if [[ "$file" =~ .*py$ ]] || [[ "$file" =~ .*css$ ]] || [[ "$file" =~ .*html$ ]] || [[ "$file" =~ .*js$ ]] ; then # Does the file end with .py css html js
           lastreboot=$(cat last_restart.txt)
           currenttime=$(date +%s)
           let elapsed=currenttime-lastreboot
           if [ "$elapsed" -lt 60 ]; then echo "less"
           else
           echo "restarting HTTPD"
           systemctl restart httpd
           echo $(date +%s)> last_restart.txt
           fi
        fi
    done
0 голосов
/ 04 октября 2018
  1. Помните, когда вы в последний раз перезапускали httpd с помощью lasttime=$(date +%s)
  2. Если сработал следующий перезапуск, спите до указанного времени, вычтенного с разницей между последним перезапуском и текущим временем difftime=$(($(date +%s) - lasttime)); if (( difftime < 60 )); then sleep $(( 60 - difftime )); fi; lasttime=$( ... )

Так что-то вроде:

    if [[.... ]] ; then # Does the file end with .py css html js

        // delay up until 60 seconds from the last restart
        if [ -n "${lasttime:-}" ]; then
             difftime=$((60 - ($(date +%s) - lasttime)))
             if ((difftime > 0)); then
                  sleep "$difftime"
             fi
        fi
        lasttime=$(date +%s)

        systemctl restart httpd # If so, do your thing here!
        #touch /home/centos/log.txt
        echo "test"
    fi
...