#!/bin/sh # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : name=$0 basename="$(basename $0)" usage() { printf "Usage: %s: [-t TIMEOUT] [-v INTERVAL] [ -r RETRY ] HOST\n" "${name}" exit 2 } log() { logger -p daemon.info -t "${basename}" "$@" } uri="ping" timeout=5 interval=1 retry=0 while getopts "t:v:r:" opt; do case $opt in t) timeout="${OPTARG}";; v) interval="${OPTARG}";; r) retry="${OPTARG}";; *) usage;; esac done shift $((OPTIND - 1)) [ -z "$1" ] && usage last=0 log "Starting..." while true; do if curl -s --max-time "${timeout}" --retry "${retry}" "$1/${uri}" &>/dev/null ; then [ ${last} = 0 ] && log "Shadowsocks is up" /etc/init.d/shadowsocks ifup 2> /dev/null last=1 else [ ${last} = 1 ] && log "Shadowsocks is down" /etc/init.d/shadowsocks ifdown 2> /dev/null last=0 fi sleep "${interval}" done