bash 脚本通过 ssh 启动服务

bash script starting service over ssh

我正尝试在我刚刚从命令行调用的 bash 脚本中通过 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 "" 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

我找到了解决方法:

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

我成功测试了这个:

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