qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] qemu-ga: Optimize freeze-hook script logic of logging error


From: Yan Vugenfirer
Subject: Re: [PATCH] qemu-ga: Optimize freeze-hook script logic of logging error
Date: Thu, 26 Dec 2024 13:50:12 +0200

On Wed, Dec 25, 2024 at 10:38 AM Dehan Meng <demeng@redhat.com> wrote:
>
> Make sure the error log of fsfreeze hooks
> when freeze/thaw/snapshot could be logged
> to system logs if the default logfile of
> qga can't be written or other situations
>
> Signed-off-by: Dehan Meng <demeng@redhat.com>
> ---
>  scripts/qemu-guest-agent/fsfreeze-hook | 36 +++++++++++++++++++++++---
>  1 file changed, 32 insertions(+), 4 deletions(-)
>
> diff --git a/scripts/qemu-guest-agent/fsfreeze-hook 
> b/scripts/qemu-guest-agent/fsfreeze-hook
> index 13aafd4845..c1feb6f5ce 100755
> --- a/scripts/qemu-guest-agent/fsfreeze-hook
> +++ b/scripts/qemu-guest-agent/fsfreeze-hook
> @@ -19,15 +19,43 @@ is_ignored_file() {
>      return 1
>  }
>
> +USE_SYSLOG=0
> +# if log file is not writable, fallback to syslog
> +[ ! -w "$LOGFILE" ] && USE_SYSLOG=1
> +# try to update log file and fallback to syslog if it fails
> +touch "$LOGFILE" &>/dev/null || USE_SYSLOG=1
> +
> +# Ensure the log file is writable, fallback to syslog if not
> +log_message() {
> +    local message="$1"
> +    if [ "$USE_SYSLOG" -eq 0 ]; then
> +        printf "%s: %s\n" "$(date)" "$message" >>"$LOGFILE"
> +    else
> +        logger -t qemu-ga-freeze-hook "$message"
> +    fi
> +}
> +
>  # Iterate executables in directory "fsfreeze-hook.d" with the specified args
>  [ ! -d "$FSFREEZE_D" ] && exit 0
> +
>  for file in "$FSFREEZE_D"/* ; do
>      is_ignored_file "$file" && continue
>      [ -x "$file" ] || continue
> -    printf "$(date): execute $file $@\n" >>$LOGFILE
> -    "$file" "$@" >>$LOGFILE 2>&1
> -    STATUS=$?
> -    printf "$(date): $file finished with status=$STATUS\n" >>$LOGFILE
> +
> +    log_message "Executing $file $@"
> +    if [ "$USE_SYSLOG" -eq 0 ]; then
> +        "$file" "$@" >>"$LOGFILE" 2>&1
> +        STATUS=$?
> +    else
> +        "$file" "$@" 2>&1 | logger -t qemu-ga-freeze-hook
> +        STATUS=${PIPESTATUS[0]}
> +    fi
> +
> +    if [ $STATUS -ne 0 ]; then
> +        log_message "Error: $file finished with status=$STATUS"
> +    else
> +        log_message "$file finished successfully"
> +    fi
>  done
>
>  exit 0
> --
> 2.40.1
>
>

Reviewed-by: Yan Vugenfirer <yvugenfi@redhat.com>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]