デーモンを実行すると、特定のディレクトリでコマンドをどのように実行できますか?

デーモンを実行すると、特定のディレクトリでコマンドをどのように実行できますか?

私のシェルスクリプトの知識は少し不足していますが、/etc/init.d/unicorn(Ubuntu 14.04)で定義されたデーモンを次のように実行したいと思います。

case "$1" in
  start)
        check_config
        check_app_root

        log_daemon_msg "Starting $DESC" $NAME || true
        if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then

別のファイル/etc/default/unicornで次の変数を定義しました。

APP_ROOT=/home/rails/myproject
...
UNICORN_OPTS="-D -c $CONFIG_RB -E $RAILS_ENV"
...
DAEMON="cd $APP_ROOT; $GEM_HOME/bin/bundle exec $GEM_PATH/bin/unicorn"

「$GEM_HOME/bin/bundle」が実行されるディレクトリなので、「cd $APP_ROOT」を追加しました。ところで、サービスを開始すると、次のエラーが発生します。

myuser@myproject:~$ sudo service unicorn restart
/home/rails/.gem/bin/bundle
 * Restarting Unicorn web server unicorn
start-stop-daemon: unable to stat //cd (No such file or directory)

目的のディレクトリからコマンドを実行できるようにオプションを保存する他の方法はありますか?

答え1

あなたがやっていることにいくつかの問題があるようです。

  • --execstart-stop-daemon1つのパラメータしか許可されていませんが、パラメータは最後に渡すことができます--

  • 引数は--exec識別子としても使用されます。start-stop-daemon実行中のインスタンスがあることを確認してください(これは/bin/sh非常に悪い候補になります)。

したがって、マシンごとに1つのインスタンスを実行することが期待されるシェルスクリプトを作成します。--exec.inに絶対パスを渡します--

関連情報