sudo suに渡されたHeredocで実行されているサブシェルから開始されたバックグラウンドプロセスからPIDをキャプチャすることはできません。

sudo suに渡されたHeredocで実行されているサブシェルから開始されたバックグラウンドプロセスからPIDをキャプチャすることはできません。

プロセスが正しく開始されたことを確認できるように、サブシェルで開始されたプロセスのPIDをキャプチャしようとしています。そのプロセスはクーガーアプリケーションです。

sudo su - $APPUSER <<-BASH
    PID="\$(bundle exec puma -C config/puma.rb)"

    "\$(bundle exec puma -C config/puma.rb & export PID=$1)"

    "\$(bundle exec puma -C config/puma.rb &)"

    PID="\$(ps aux | grep \"[p]uma.*[u]nix.*$APPNAME\" | awk '{ print \$2}')"
BASH

奇妙なことは、何も返さないということです。環境なしでこれらのいずれかを実行すると、""次のエラーが発生します。

-bash: line 22: [26740]: command not found

の数字[]はpidです。スクリプトを再実行すると、次のような結果が得られるので、これがわかります(pidが存在することを確認してください)。

app is running with pid: 26740

私はheredocでコマンドを実行してコマンドを渡すので、これが起こると思います。sudo su

サブシェルから始まるバックグラウンドプロセスからpidを取得する方法。

ベストアンサー1

内部PID値をオーバーライドできません。小文字の環境変数を使用します。

おすすめ記事