aboutsummaryrefslogtreecommitdiff
path: root/scripts/qemu-guest-agent
diff options
context:
space:
mode:
authorDehan Meng <demeng@redhat.com>2024-12-25 16:37:44 +0800
committerKonstantin Kostiuk <kkostiuk@redhat.com>2025-01-06 12:57:13 +0200
commit85978dfb6b1c1334ed6aa998ca06c3f45e2127e0 (patch)
tree61bc3ef085ffe2b82732455b43139370c42036d9 /scripts/qemu-guest-agent
parent5288d9d0853622668bd293023d2dfe200f3606f1 (diff)
downloadqemu-85978dfb6b1c1334ed6aa998ca06c3f45e2127e0.zip
qemu-85978dfb6b1c1334ed6aa998ca06c3f45e2127e0.tar.gz
qemu-85978dfb6b1c1334ed6aa998ca06c3f45e2127e0.tar.bz2
qemu-ga: Optimize freeze-hook script logic of logging error
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> Reviewed-by: Yan Vugenfirer <yvugenfi@redhat.com> Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> Message-ID: <20241225083744.277374-1-demeng@redhat.com> Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Diffstat (limited to 'scripts/qemu-guest-agent')
-rwxr-xr-xscripts/qemu-guest-agent/fsfreeze-hook36
1 files changed, 32 insertions, 4 deletions
diff --git a/scripts/qemu-guest-agent/fsfreeze-hook b/scripts/qemu-guest-agent/fsfreeze-hook
index 13aafd4..c1feb6f 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