Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未找到Shell脚本命令_Ruby On Rails_Bash_Shell_Unicorn - Fatal编程技术网

Ruby on rails 未找到Shell脚本命令

Ruby on rails 未找到Shell脚本命令,ruby-on-rails,bash,shell,unicorn,Ruby On Rails,Bash,Shell,Unicorn,我正在编写一个unicorn shell脚本,用于启动/停止/重新启动unicorn。不管怎样,我都很难让它真正起作用 在此方面的任何帮助都将不胜感激 当我运行shell脚本(sh unicorn_init.sh)时,我得到以下输出 kill: 72: No such process unicorn_init.sh: 72: cd /data/appname/staging/releases/20120823055753; bundle exec unicorn_rails -

我正在编写一个unicorn shell脚本,用于启动/停止/重新启动unicorn。不管怎样,我都很难让它真正起作用

在此方面的任何帮助都将不胜感激

当我运行shell脚本(sh unicorn_init.sh)时,我得到以下输出

    kill: 72: No such process

    unicorn_init.sh: 72: cd /data/appname/staging/releases/20120823055753; bundle exec unicorn_rails -D -c /data/appname/staging/releases/20120823055753/config/unicorn.rb -E staging: not found
这是我的shell脚本的当前版本:

#!/bin/sh
set -e
# Example init script, this can be used with nginx, too,
# since nginx and unicorn accept the same signals

# Feel free to change any of the following variables for your app:
TIMEOUT=${TIMEOUT-60}
APP_ROOT=/data/appname/staging/releases/20120823055753
SHARED_ROOT=/data/appname/staging/shared
PID=$SHARED_ROOT/pids/unicorn-staging.pid
CMD="cd $APP_ROOT; bundle exec unicorn_rails -D -c $APP_ROOT/config/unicorn.rb -E staging"
action="$1"
set -u

old_pid="$PID.oldbin"

cd $APP_ROOT || exit 1

sig () {
        test -s "$PID" && kill -$1 `cat $PID`
}

oldsig () {
        test -s $old_pid && kill -$1 `cat $old_pid`
}

case $action in
start)
        sig 0 && echo >&2 "Already running" && exit 0
        "$CMD"
        ;;
stop)
        sig QUIT && exit 0
        echo >&2 "Not running"
        ;;
force-stop)
        sig TERM && exit 0
        echo >&2 "Not running"
        ;;
restart|reload)
        sig HUP && echo reloaded OK && exit 0
        echo >&2 "Couldn't reload, starting '$CMD' instead"
        "$CMD"
        ;;
upgrade)
        if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
        then
                n=$TIMEOUT
                while test -s $old_pid && test $n -ge 0
                do
                        printf '.' && sleep 1 && n=$(( $n - 1 ))
                done
                echo

                if test $n -lt 0 && test -s $old_pid
                then
                        echo >&2 "$old_pid still exists after $TIMEOUT seconds"
                        exit 1
                fi
                exit 0
        fi
        echo >&2 "Couldn't upgrade, starting '$CMD' instead"
        "$CMD"
        ;;
reopen-logs)
        sig USR1
        ;;
*)
        echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
        exit 1
        ;;
esac
#/垃圾箱/垃圾箱
set-e
#示例init脚本,也可以与nginx一起使用,
#因为nginx和unicorn接受相同的信号
#请随意更改应用程序的以下任何变量:
超时=${TIMEOUT-60}
APP_ROOT=/data/appname/staging/releases/20120823055753
共享根=/data/appname/staging/SHARED
PID=$SHARED_ROOT/PID/unicorn-staging.PID
CMD=“cd$APP\u ROOT;bundle exec unicorn\u rails-D-c$APP\u ROOT/config/unicorn.rb-E staging”
action=“$1”
set-u
old_pid=“$pid.oldbin”
cd$APP|U根目录|退出1
sig(){
测试-s“$PID”和压井-1`cat$PID`
}
oldsig(){
测试-s$old\u pid和kill-$1`cat$old\u pid`
}
案件$诉讼
开始)
信号0&&echo>&2“已在运行”&退出0
“$CMD”
;;
(停止)
sig退出&退出0
echo>&2“未运行”
;;
(强制停止)
sig术语&退出0(&F)
echo>&2“未运行”
;;
重新启动(重新加载)
sig HUP和echo已重新加载确定和退出0(&E)
echo>&2“无法重新加载,改为启动“$CMD”
“$CMD”
;;
(升级)
如果sig USR2&&sleep 2&&sig 0&&oldsig退出
然后
n=$TIMEOUT
而test-s$old\u pid和test$n-ge 0
做
printf'.&&sleep 1&&n=$($n-1))
完成
回声
如果测试$n-lt 0和测试-s$old\u pid
然后
echo>&2“$old\u pid在$TIMEOUT秒后仍然存在”
出口1
fi
出口0
fi
echo>&2“无法升级,改为启动“$CMD”
“$CMD”
;;
重新打开日志)
sig USR1
;;
*)
echo>&2“用法:$0”
出口1
;;
以撒

$CMD
周围的引号表示整个变量值是一个命令,包括嵌入的空格。下面是一个简单的例子来说明:

/home/user1> CMD='echo hello'
/home/user1> $CMD
hello
/home/user1> "$CMD"
-bash: echo hello: command not found
/home/user1> 

通过快速浏览,您需要将
sig
修改为(1)如果进程不存在,则不显示来自
kill
的错误输出,以及(2)不死亡。由于
set-e
的原因,如果试图终止不再运行的进程,脚本将终止。这并不难解决,但是为
set-e
编码更具挑战性。请删除
“$CMD”