我的自定义init shell脚本会停止部署脚本

时间:2014-06-13 09:13:30

标签: linux bash shell init

我有一个可以正常运行的部署脚本。最后,我添加了这个块:

cat << EOF > /etc/init.d/uwsgi
#!/bin/bash
daemon=$APPVENV/bin/uwsgi
args="--emperor $APPCONF/uwsgi/app.ini --daemonize /var/log/emperor.log --emperor-pidfile $APPDIR/emperor.pid --gid `id -g $APPUSER`"
pid=$APPDIR/emperor.pid
case "$1" in
    start)
        echo "Starting uwsgi"
        start-stop-daemon -p $pid --start --exec $daemon -- $args
        ;;
    stop)
        echo "Stopping script uwsgi"
        start-stop-daemon --signal INT -p $pid --stop $daemon -- $args
        ;;
    reload)
        echo "Reloading conf"
        kill -HUP $(cat $pid)
        ;;
    *)
        echo "Usage: /etc/init.d/uwsgi {start|stop|reload}"
        exit 1
    ;;
esac
exit 0
EOF

现在,当我运行我的部署脚本时,它会卡在这里,我只看到一个闪烁的光标,它不会在它之后运行任何行。

我的格式化是否有任何问题,因为我知道用cat创建一个文件是非常挑剔的,如何格式化,制表等等。

1 个答案:

答案 0 :(得分:1)

变量仍在heredocs中替换,也可以使用$()进行替换,您可以在脚本中执行此操作:

kill -HUP $(cat $pid)

您的安装程序尝试捕获该文件,$ pid可能为空,因此它等待标准输入的输入。 你想逃避那些&#34; $&#34;防止扩张,比如

\$(cat \$foo)

当然,对于所有这些变量,您也不希望在安装过程中进行扩展。