Мой пользовательский сценарий оболочки 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 ответ

Решение

Переменные по-прежнему подставляются в heredocs, также разделяя их на $(), что вы делаете в своем скрипте здесь:

kill -HUP $(cat $pid)

Ваш установщик пытается отследить этот файл с $pid, вероятно, пустым, поэтому он ожидает ввода от стандартного ввода. Вы хотите избежать этих "$", чтобы предотвратить расширение, например

\$(cat \$foo)

И, конечно, со всеми этими переменными, которые вы не хотите раскрывать во время установки.

Другие вопросы по тегам