#!/usr/bin/perl use Fcntl ':flock'; $ubc_file = '/proc/user_beancounters'; $ubc_prev_file = '/var/tmp/user_beancounters.prev'; $lock_file = '/var/tmp/check_ubc.lock'; open( lfh, '>' . $lock_file ) or die( "$lock_file open error\n" ); unless( flock( lfh, LOCK_EX | LOCK_NB ) ) { print "check_ubc locked\n"; exit; } if( -f $ubc_prev_file ) { open( fh, $ubc_prev_file ) or die( "$ubc_prev_file open error\n" ); while( ) { chomp; ( $k, $v ) = split( /\t/ ); $ubc_prev{ $k } = $v; } close( fh ); } open( fh, $ubc_file ) or die( "$ubc_file open error\n" ); $uid = 0; while( ) { s/^\s+//; s/\s+$//; next if( /^Version/ ); next if( /^uid/ ); next if( /^$/ ); if( /^(\d+)\:/ ) { $uid = $1; @sl = split( /\s+/ ); $k = $uid . '_' . $sl[ 1 ]; $v = $sl[ 6 ]; } else { @sl = split( /\s+/ ); next if( $sl[ 0 ] eq 'dummy' ); $k = $uid . '_' . $sl[ 0 ]; $v = $sl[ 5 ]; } $ubc{ $k } = $v; if( defined( $ubc_prev{ $k } ) && $ubc{ $k } > $ubc_prev{ $k } ) { print $k . ': ' . $ubc_prev{ $k } . ' -> ' . $v . "\n"; print; print "\n"; } } close( fh ); open( fh, '>' . $ubc_prev_file ) or die( "$ubc_file open error\n" ); for $k ( keys( %ubc ) ) { print fh $k . "\t" . $ubc{ $k } . "\n"; } close( fh ); close( lfh ); exit;