關閉指定pid程式, utils.sh
阿新 • • 發佈:2018-12-24
mkdir -p /var/vcap/sys/log exec > >(tee -a >(logger -p user.info -t vcap.$(basename $0).stdout) >>/var/vcap/sys/log/$(basename $0).log) exec 2> >(tee -a >(logger -p user.error -t vcap.$(basename $0).stderr) >>/var/vcap/sys/log/$(basename $0).err.log) pid_guard() { echo "------------ STARTING `basename $0` at `date` --------------" | tee /dev/stderr pidfile=$1 name=$2 if [ -f "$pidfile" ]; then pid=$(head -1 "$pidfile") if [ -n "$pid" ] && [ -e /proc/$pid ]; then echo "$name is already running, please stop it first" exit 1 fi echo "Removing stale pidfile..." rm $pidfile fi } wait_pidfile() { pidfile=$1 try_kill=$2 timeout=${3:-0} force=${4:-0} countdown=$(( $timeout * 10 )) if [ -f "$pidfile" ]; then pid=$(head -1 "$pidfile") if [ -z "$pid" ]; then echo "Unable to get pid from $pidfile" exit 1 fi if [ -e /proc/$pid ]; then if [ "$try_kill" = "1" ]; then echo "Killing $pidfile: $pid " kill $pid fi while [ -e /proc/$pid ]; do sleep 0.1 [ "$countdown" != '0' -a $(( $countdown % 10 )) = '0' ] && echo -n . if [ $timeout -gt 0 ]; then if [ $countdown -eq 0 ]; then if [ "$force" = "1" ]; then echo -ne "\nKill timed out, using kill -9 on $pid... " kill -9 $pid sleep 0.5 fi break else countdown=$(( $countdown - 1 )) fi fi done if [ -e /proc/$pid ]; then echo "Timed Out" else echo "Stopped" fi else echo "Process $pid is not running" fi rm -f $pidfile else echo "Pidfile $pidfile doesn't exist" fi } kill_and_wait() { pidfile=$1 # Monit default timeout for start/stop is 30s # Append 'with timeout {n} seconds' to monit start/stop program configs timeout=${2:-25} force=${3:-1} wait_pidfile $pidfile 1 $timeout $force } check_mount() { opts=$1 exports=$2 mount_point=$3 if grep -qs $mount_point /proc/mounts; then echo "Found NFS mount $mount_point" else echo "Mounting NFS..." mount $opts $exports $mount_point if [ $? != 0 ]; then echo "Cannot mount NFS from $exports to $mount_point, exiting..." exit 1 fi fi } # Check the syntax of a sudoers file. check_sudoers() { /usr/sbin/visudo -c -f "$1" } # Check the syntax of a sudoers file and if it's ok install it. install_sudoers() { src="$1" dest="$2" check_sudoers "$src" if [ $? -eq 0 ]; then chown root:root "$src" chmod 0440 "$src" cp -p "$src" "$dest" else echo "Syntax error in sudoers file $src" exit 1 fi } # Add a line to a file if it is not already there. file_must_include() { file="$1" line="$2" # Protect against empty $file so it doesn't wait for input on stdin. if [ -n "$file" ]; then grep --quiet "$line" "$file" || echo "$line" >> "$file" else echo 'File name is required' exit 1 fi }