私はブート時に起動スクリプトautossh
を起動するスクリプトを作成しようとしていますが、動作させることができません。私はそれが正常に動作していなかったので、それがすべての行動を記録しているのを見たいと思いますが、それはうまくいっていません。私はbash
のプロではないので、私のコードは恐ろしく恥ずかしいではないことを願っています。Bash initスクリプトfor autossh
#!/bin/sh
#
# by Patrick van der Leer <[email protected]>
# released under GPL, version 2 or later
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON="/usr/bin/autossh"
DESC="Autossh job"
PIDFOLDER="/var/run/autossh"
PIDFOLDERSSH="$PIDFOLDER/ssh"
REMOTE_USER=""
REMOTE_ADDR=""
LOGFILE="/var/log/autossh.log"
if [ ! -d $PIDFOLDER ] ; then
mkdir -p $PIDFOLDER
fi
if [ ! -d $PIDFOLDERSSH ] ; then
mkdir -p $PIDFOLDERSSH
fi
test -f $DAEMON || exit 0
. /lib/lsb/init-functions
PIDFILE="$PIDFOLDER/$REMOTE_USER-$REMOTE_ADDR.pid"
PIDFILESSH="$PIDFOLDERSSH/$REMOTE_USER-$REMOTE_ADDR.pid"
is_running() {
if [ -f $PIDFILE ]; then
PID=`cat $PIDFILE`
if [ -n "$PID" ]; then
return 0
else
return 1
fi
else
return 1
fi
}
start_autossh() {
if ! is_running; then
echo "Starting $DESC"
export AUTOSSH_FIRST_POLL=10
export AUTOSSH_POLL=60
export AUTOSSH_PIDFILE=$PIDFILESSH
start-stop-daemon --start --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- -M 29000 -i /root/.ssh/id_rsa -X -C -R 2222:localhost:22 [email protected]$REMOTE_ADDR >> $LOGFILE 2>&1 &
sleep 1;
if ! is_running; then
echo "$DESC: running @ pid $PID"
else
echo 'Something went wrong';
fi
else
echo "$DESC: already running (pid $PID)"
fi
}
stop_autossh() {
if is_running; then
echo "Stopping $DESC"
start-stop-daemon --stop --pidfile $PIDFILE --signal 15
if [ -f $PIDSSHFILE ]; then
PIDSSH=`cat $PIDFILESSH`
kill $PIDSSH
rm -f $PIDFILESSH
fi
else
echo "$DESC: not running"
fi
[ -f $PIDFILE ] && rm -f $PIDFILE
}
case "$1" in
start)
start_autossh
;;
stop)
stop_autossh
;;
force-reload|restart)
stop_autossh
start_autossh
;;
status)
if is_running; then
echo "$DESC: running (pid $PID)"
exit 0
else
echo "$DESC: not running"
[ -f $PIDFILE ] && exit 1 || exit 3
fi
;;
log)
if [ -f $LOGIFLE ]; then
tail $LOGFILE
else
echo "log file '$LOGFILE' does't exist"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload|status|log}"
exit 3
;;
esac
exit 0
* bash *と/ bin/shは同じものかもしれませんが、まったく違うかもしれません。ほとんどのDebianシステムでは、 '/ bin/sh'は* dash *です。これは高速ですが、[POSIX標準シェル](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/toc.html)に加えてbash *の機能のほとんどが欠けています。多くの場合、対話型の使用のためにbash(またはzsh、さらに多くの機能を備えています)を使用しますが、POSIXシェル用のスクリプトを作成し、ダッシュなどのより高速な実装を使用して実行します。もし/ bin/shが本当に 'bash'、' dash'、OR '元の'/bin/sh'、Bourneシェル(もしあなたがAIX、Solarisなどを使っているのなら、JanHudecのコメントごとに –
) HPや他の旧式のUNIX、Linuxとは対照的に、Bourneは他のキャビネットと同様に理解する必要があります)。 Bourneシェルとの互換性が必要な場合を除き、少なくとも1995年以来廃止されている '' cat $ PIDFILE''ではなく、現代的でネスト可能な '$(cat $ PIDFILE)'を使用してください。それ以外の場合は、コード神が意図した! ;-) がんばろう。 – shellter
ありがとう/ bin/shはダッシュへのシンボリックリンクです:) – PvdL