diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-06-19 19:41:12 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-06-19 19:41:13 +0000 |
| commit | 8cb26853debf400c66eca9211cd90c700cc30d27 (patch) | |
| tree | d8ee15adfbbdd60592c9d753cfcb1e15a6269d62 /tools | |
| parent | 998740ca3752d3c60ac452342362ee2bacfa2d7e (diff) | |
| parent | 0af9b83a6b2577b45e580e24efe82b692f9d1f05 (diff) | |
| download | nova-8cb26853debf400c66eca9211cd90c700cc30d27.tar.gz nova-8cb26853debf400c66eca9211cd90c700cc30d27.tar.xz nova-8cb26853debf400c66eca9211cd90c700cc30d27.zip | |
Merge "xenapi: script to rotate the guest logs"
Diffstat (limited to 'tools')
| -rwxr-xr-x | tools/xenserver/rotate_xen_guest_logs.sh | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/xenserver/rotate_xen_guest_logs.sh b/tools/xenserver/rotate_xen_guest_logs.sh new file mode 100755 index 000000000..0e6c7d6ea --- /dev/null +++ b/tools/xenserver/rotate_xen_guest_logs.sh @@ -0,0 +1,62 @@ +#!/bin/bash +set -eux + +# Script to rotate console logs +# +# Should be run on Dom0, with cron, every minute: +# * * * * * /root/rotate_xen_guest_logs.sh +# +# Should clear out the guest logs on every boot +# because the domain ids may get re-used for a +# different tenant after the reboot +# +# /var/log/xen/guest should be mounted into a +# small loopback device to stop any guest being +# able to fill dom0 file system + +log_dir="/var/log/xen/guest" +kb=1024 +max_size_bytes=$(($kb*$kb)) +truncated_size_bytes=$((5*$kb)) +list_domains=/opt/xensource/bin/list_domains + +log_file_base="${log_dir}/console." +tmp_file_base="${log_dir}/tmp.console." + +# Ensure logging is setup correctly for all domains +xenstore-write /local/logconsole/@ "${log_file_base}%d" + +# Move logs we want to keep +domains=$($list_domains | sed '/^id*/d' | sed 's/|.*|.*$//g' | xargs) +for i in $domains; do + log="${log_file_base}$i" + tmp="${tmp_file_base}$i" + mv $log $tmp || true +done + +# Delete all console logs, +# mostly to remove logs from recently killed domains +rm -f ${log_dir}/console.* + +# Reload domain list, in case it changed +# (note we may have just deleted a new console log) +domains=$($list_domains | sed '/^id*/d' | sed 's/|.*|.*$//g' | xargs) +for i in $domains; do + log="${log_file_base}$i" + tmp="${tmp_file_base}$i" + size=$(stat -c%s "$tmp") + + # Trim the log if required + if [ "$size" -gt "$max_size_bytes" ]; then + tail -c $truncated_size_bytes $tmp > $log || true + else + mv $tmp $log || true + fi + + # Notify xen that it needs to reload the file + xenstore-write /local/logconsole/$i $log + xenstore-rm /local/logconsole/$i +done + +# Delete all the tmp files +rm -f ${tmp_file_base}* || true |
