Мой пользовательский сценарий оболочки 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)
И, конечно, со всеми этими переменными, которые вы не хотите раскрывать во время установки.