bash脚本通过ssh启动服务

时间:2016-07-22 17:30:09

标签: bash service ssh centos init.d

我正在尝试在bsh脚本中通过ssh启动服务,我只是从命令行调用。我可以执行以下命令:(我有ssh密钥,所以我不需要输入p / w)

ssh -t -t user@server 'sudo /sbin/service test stop' - 工作正常,停止服务

ssh -t -t user@server 'sudo /sbin/service test status' - 工作正常,状态是服务

ssh -t -t user@server 'sudo /sbin/service test start' - 不启动服务???

这是在centos 6.7上运行的自定义init.d脚本

有没有人有任何想法?

或者看看我可能缺少什么?

谢谢!

编辑:这是init.d脚本:

#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          test
# Required-Start:    networking
# Required-Stop:     networking
# Default-Start:     3 4 5
# Default-Stop:      0 1 6
# Short-Description:
### END INIT INFO
#

###source function library
source /etc/init.d/functions

APPNAME="test"
APPDIR="/tmp"
CONFIGDIR="/tmp/config"
LOCKFILE=/var/lock/subsys/$APPNAME
PIDFILE="/var/run/$APPNAME.pid"

###Declare variables for test
CONFIG="test.config"

start() {
    echo -n "Starting $APPNAME: "
    source "${CONFIGDIR}/source.txt"
    daemon --pidfile="$PIDFILE" "/tmp/${APPNAME} ${CONFIGDIR}/${CONFIG} >> /tmp/console.log 2>&1 &"
    RETVAL=$?
    [ $RETVAL -eq 0 ] && {
            touch $LOCKFILE
            pidof $APPNAME > $PIDFILE
    }
    return $RETVAL
}

stop() {
    echo -n $"Stopping $APPNAME:"
    killproc -p "$PIDFILE" $APPNAME
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f $LOCKFILE $PIDFILE
    return $RETVAL
}

case "$1" in
    start)
            start
            ;;
    stop)
            stop
            ;;
    status)
            status -p "$PIDFILE" "$APPNAME"
            ;;
    restart)
            stop
            start
            ;;
    *)
            echo "Usage $prg {start|stop|status|restart}"
            exit 1
            ;;
esac
exit $RETVAL

2 个答案:

答案 0 :(得分:0)

我找到了一个解决方法:

ssh -t -t user@server 'sudo bash -s' < '/tmp/start_test.sh' 

然后在服务器上:

/tmp/start_test.sh

#!/bin/bash

sudo service test start >> /tmp/start.log

exit 0

答案 1 :(得分:0)

我成功测试了这个:

echo "sudo service test start && exit" | python -c 'import pty, sys; pty.spawn(sys.argv[1:])' ssh user@server