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

Linux 我的自定义init shell脚本停止部署脚本,linux,bash,shell,init,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/

我有一个运行良好的部署脚本。最后,我添加了以下块:

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/etc/init.d/uwsgi
#!/bin/bash
守护进程=$APPVENV/bin/uwsgi
args=“--emperon$APPCONF/uwsgi/app.ini--daemonize/var/log/emperon.log--emperon-pidfile$APPDIR/emperon.pid--gid`id-g$APPUSER`”
pid=$APPDIR/emperor.pid
案件“$1”
开始)
回声“启动uwsgi”
start-stop守护进程-p$pid--start--exec$daemon--$args
;;
(停止)
回显“停止脚本uwsgi”
启动停止守护进程--信号INT-p$pid--停止$daemon--$args
;;
重新加载)
回显“重新加载配置”
压井-HUP$(cat$pid)
;;
*)
echo“用法:/etc/init.d/uwsgi{start | stop | reload}”
出口1
;;
以撒
出口0
EOF
现在,当我运行我的部署脚本时,它被卡在这里,我只看到一个闪烁的光标,它后面没有任何行


我的格式是否有问题,因为我知道使用cat创建文件时对文件的格式、制表方式等非常挑剔。

在heredocs中变量仍然被替换,也使用$()进行子shell,这是您在脚本中执行的操作:

kill -HUP $(cat $pid)
您的安装程序尝试对该文件进行cat,其中$pid可能为空,因此它等待来自标准输入的输入。 您希望避开这些“$”以防止扩展,如

\$(cat \$foo)

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

Hi。谢谢你的回复。请你解释一下第一点,我应该怎么处理我的VAR?