Added support for multiple modules at a time and exclude pattern.
This commit is contained in:
parent
5d51934894
commit
d710e1f528
1 changed files with 90 additions and 54 deletions
144
check_modules.sh
144
check_modules.sh
|
@ -1,24 +1,46 @@
|
|||
#!/bin/bash -l
|
||||
#
|
||||
# Copyright (c) 2012-2015 Christoph Niethammer <niethammer@hlrs.de>
|
||||
# Copyright (c) 2012-2016 Christoph Niethammer <niethammer@hlrs.de>
|
||||
#
|
||||
# Script checking the module environment for problems during module loading/unloading
|
||||
#
|
||||
# Usage:
|
||||
# check_modules.sh [MODULE]
|
||||
#
|
||||
# Options:
|
||||
# MODULE May be any valid module path as used for 'module avail [MODULE]'
|
||||
#
|
||||
|
||||
function print_usage() {
|
||||
echo <<EOT
|
||||
Script checking the module environment for problems during module loading/unloading
|
||||
usage: $0 [MODULE_PATTERN] [--exclude PATTERN]"
|
||||
EOT
|
||||
}
|
||||
|
||||
# Command line options:
|
||||
moduleclass=$1 # check only subset of modules
|
||||
declare -a moduleclasses # check only subset of modules
|
||||
declare -a exclude_pattern # exclude modules with given pattern, e.g. nightly builds
|
||||
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
key="$1"
|
||||
case $key in
|
||||
--exclude-pattern|--exclude)
|
||||
exclude_patterns+=($2)
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
print_usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
moduleclasses+=($1)
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
# definitions for esear color output to display
|
||||
Color_Off='\e[0m' # Text Reset
|
||||
IGreen='\e[0;92m' # Intense Green
|
||||
IRed='\e[0;91m' # Intense Red
|
||||
|
||||
echo Moduleclasses: ${moduleclasses[@]}
|
||||
echo Exclude: ${exclude_patterns[@]}
|
||||
# intermediate files, logfiles
|
||||
LOGDIR=${LOGDIR:=$PWD}
|
||||
tmpdir=/tmp/check_modules-$USER
|
||||
|
@ -48,60 +70,74 @@ echo "Environment:" >> $logfile
|
|||
cat $module_clean_env_file >> $logfile
|
||||
echo "--------------------" >> $logfile
|
||||
|
||||
for m_original in $(module av -t $moduleclass 2>&1); do
|
||||
if [[ $m_original =~ ^[A-Za-z] ]]; then # skip any non module line in output
|
||||
m=$(echo $m_original | sed -e 's/(.*)//') # Remove aliases e.g. (default)
|
||||
echo -n "Checking $m_original ... "
|
||||
echo "Checking $m_original ... " >> $logfile
|
||||
for moduleclass in ${moduleclasses[@]}
|
||||
do
|
||||
for m_original in $(module av -t $moduleclass 2>&1); do
|
||||
match=0
|
||||
for exclude_pattern in ${exclude_patterns[@]}
|
||||
do
|
||||
if [[ "$m_original" =~ "$exclude_pattern" ]]; then
|
||||
echo MATCH: $exclude_pattern
|
||||
match=1
|
||||
fi
|
||||
done
|
||||
if [ $match == 1 ]; then
|
||||
continue
|
||||
fi
|
||||
if [[ $m_original =~ ^[A-Za-z] ]]; then # skip any non module line in output
|
||||
m=$(echo $m_original | sed -e 's/(.*)//') # Remove aliases e.g. (default)
|
||||
echo -n "Checking $m_original ... "
|
||||
echo "Checking $m_original ... " >> $logfile
|
||||
|
||||
cmd="module load $m"
|
||||
echo $cmd >> $logfile
|
||||
$cmd > $module_load_logfile 2>&1
|
||||
cat $module_load_logfile >> $logfile
|
||||
module li >>$logfile 2>&1
|
||||
|
||||
# check if module was loaded and did not report errors during loading
|
||||
if module li -t 2>&1 | grep $m >/dev/null && ! grep ERROR $module_load_logfile >/dev/null ; then
|
||||
|
||||
cmd="module rm $m"
|
||||
cmd="module load $m"
|
||||
echo $cmd >> $logfile
|
||||
$cmd > $module_rm_logfile 2>&1
|
||||
cat $module_rm_logfile >> $logfile
|
||||
$cmd > $module_load_logfile 2>&1
|
||||
cat $module_load_logfile >> $logfile
|
||||
module li >>$logfile 2>&1
|
||||
|
||||
# check if module was unloaded
|
||||
if module li -t 2>&1 | grep $m > /dev/null; then
|
||||
echo -e "${IRed}unloading failed${Color_Off}"
|
||||
echo "ERROR: unloading module '$m' failed" >> $logfile
|
||||
failed_modules=(${failed_modules[@]} $m_original)
|
||||
# check if module was loaded and did not report errors during loading
|
||||
if module li -t 2>&1 | grep $m >/dev/null && ! grep ERROR $module_load_logfile >/dev/null ; then
|
||||
|
||||
cmd="module rm $m"
|
||||
echo $cmd >> $logfile
|
||||
$cmd > $module_rm_logfile 2>&1
|
||||
cat $module_rm_logfile >> $logfile
|
||||
module li >>$logfile 2>&1
|
||||
|
||||
# check if module was unloaded
|
||||
if module li -t 2>&1 | grep $m > /dev/null; then
|
||||
echo -e "${IRed}unloading failed${Color_Off}"
|
||||
echo "ERROR: unloading module '$m' failed" >> $logfile
|
||||
failed_modules=(${failed_modules[@]} $m_original)
|
||||
else
|
||||
echo -e "${IGreen}success${Color_Off}"
|
||||
echo "SUCCESS" >> $logfile
|
||||
fi
|
||||
|
||||
else
|
||||
echo -e "${IGreen}success${Color_Off}"
|
||||
echo "SUCCESS" >> $logfile
|
||||
echo -e "${IRed}loading failed${Color_Off}"
|
||||
echo "ERROR: loading module '$m' failed" >> $logfile
|
||||
failed_modules=(${failed_modules[@]} $m)
|
||||
fi
|
||||
|
||||
else
|
||||
echo -e "${IRed}loading failed${Color_Off}"
|
||||
echo "ERROR: loading module '$m' failed" >> $logfile
|
||||
failed_modules=(${failed_modules[@]} $m)
|
||||
# clean up module environment
|
||||
cmd="module purge"
|
||||
echo $cmd >> $logfile
|
||||
$cmd >>$logfile 2>&1
|
||||
module li >>$logfile 2>&1
|
||||
echo "Resetting environment ..." >>$logfile
|
||||
|
||||
# Reset the complete environment manually to overcome problems with
|
||||
# inconsistent internal caches of the module command after module purge.
|
||||
source $module_clean_env_file 2>/dev/null
|
||||
|
||||
# clean up intermediate files
|
||||
rm -f $module_load_logfile
|
||||
rm -f $module_rm_logfile
|
||||
|
||||
echo >>$logfile 2>&1
|
||||
fi
|
||||
|
||||
# clean up module environment
|
||||
cmd="module purge"
|
||||
echo $cmd >> $logfile
|
||||
$cmd >>$logfile 2>&1
|
||||
module li >>$logfile 2>&1
|
||||
echo "Resetting environment ..." >>$logfile
|
||||
|
||||
# Reset the complete environment manually to overcome problems with
|
||||
# inconsistent internal caches of the module command after module purge.
|
||||
source $module_clean_env_file 2>/dev/null
|
||||
|
||||
# clean up intermediate files
|
||||
rm -f $module_load_logfile
|
||||
rm -f $module_rm_logfile
|
||||
|
||||
echo >>$logfile 2>&1
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# clean up file storing the initial environment
|
||||
|
|
Loading…
Reference in a new issue