Skip to content
Snippets Groups Projects
check_fs_writable 2.11 KiB
#!/usr/bin/env bash
# ======================================================================
#
# Check filesystem ... is it readonly?
#
# requirements:
# - none
#
# ----------------------------------------------------------------------
# 2021-03-23  v0.0  <axel.hahn@iml.unibe.ch>
# 2023-07-27  v1.2  <axel.hahn@unibe.ch>     shell fixes; update help page
# ======================================================================


. $( dirname $0 )/inc_pluginfunctions

self_APPVERSION=1.2

dirs2test="/tmp /var/tmp"
out=""

# ----------------------------------------------------------------------
# functions
# ----------------------------------------------------------------------

function showHelp(){
    local _self; _self=$(basename $0)
cat <<EOF
$( ph.showImlHelpHeader )

Check if a filesystem is readonly in given directories.
In each of the given directories a random file will be touched.

The response is critical of one of the directory is not writable
for the icinga client user.

SYNTAX:
$_self [directory [more directories]]

OPTIONS:

    -h or --help   show this help.

PARAMETERS:

    DIRECTORY where to touch a temporary file
              default directories:
              $dirs2test

EXAMPLE:

    $_self /tmp /root /var/www

EOF
}
# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------

# --- check required tools
# ph.require bc top


# --- check param -h
case "$1" in
    "--help"|"-h")
        showHelp
        exit 0
        ;;
    *)
esac

# params are directory names ... if a param was given it overrides the internal default
test $# -gt 0 && dirs2test="$*"


# ----- MAKE CHECK

for mydir in $dirs2test
do
  touchfile=$mydir/icinga_touch_testfile__${RANDOM}_${RANDOM}
  if ! out="$out

--- touching something into $mydir
    $( touch $touchfile 2>&1 && ls -l $touchfile && rm -f $touchfile )"
  then
    ph.setStatus "critical"
  fi
done


# ----- OUTPUT

ph.status "check if filesystem is writable in $dirs2test $out"


# ----- CLEANUP AND BYE!

ph.exit

# ----------------------------------------------------------------------