#~/bin/bash # piscal manager script usage="$(basename "$0") [-h] -d directory_name -f input_filename -- script to manage Piscal where: -h show this help text -d working directory name -o input filename -s job status" # http://stackoverflow.com/a/14203146/99492 # http://wiki.bash-hackers.org/howto/getopts_tutorial # Initialize variables: base_directory="/home/poprhythm/LeafWeb" directory_name="" input_filename="" get_status=false pid_filename="piscal.pid" out_filename="piscal.out" while getopts "hd:f:s" opt; do #echo "$opt = $OPTARG" case "$opt" in h ) echo "$usage" exit ;; d ) directory_name=$OPTARG ;; f ) input_filename=$OPTARG ;; s ) get_status=true ;; \?) printf "illegal option: -%s\n" "$OPTARG" >&2 echo "$usage" >&2 exit 1 ;; esac done if [ -z "$directory_name" ]; then echo "directory name required (-d)" exit 1 fi if [ ! -d "$base_directory/$directory_name" ]; then echo "directory $base_directory/$directory_name not found" exit 1 fi if [ "$get_status" = false ]; then if [ -z "$input_filename" ]; then echo "input filename required (-f)" exit 1 fi if [ ! -f "$base_directory/$directory_name/$input_filename" ]; then echo "input filename $base_directory/$directory_name/$input_filename not found" exit 1 fi fi if [ "$get_status" = true ]; then pid_path="$base_directory/$directory_name/$pid_filename" # if the pid doesn't exist, then process never started if [ ! -f "$pid_path" ]; then echo "no pid file found" exit 1 fi pid=$(head -n 1 $pid_path) # if the pid exists, check the process status using ps if ps -p $pid > /dev/null; then # if it is in ps, then it's still running echo running else # otherwise, it is complete, check the output for success/error # TODO: examine output for errors, etc echo complete fi else command="sleep 100s" nohup ${command} > $base_directory/$directory_name/$out_filename 2>&1 & # write the PID to a temp file to check for completion later echo $! > $base_directory/$directory_name/$pid_filename fi