プロセスIDが存在しない場合にスクリプトが終了するのを防ぐ方法は?

プロセスIDが存在しない場合にスクリプトが終了するのを防ぐ方法は?

Ubuntu Linux 14.04でbashシェルを使用しています。このスクリプトがあります...

SIDEKIQ_PID="$APP_ROOT/tmp/sidekiq.pid"
SIDEKIQ_STOP_CMD="cd $APP_ROOT && bundle exec sidekiqctl stop $SIDEKIQ_PID 0"
...
    su - $USER -c "$SIDEKIQ_STOP_CMD"
    echo "Stopped sidekiq"

私が気づいたのは、ファイル「$ SIDEKIQ_PID」に定義されているPIDがもう存在しない場合は、次の行です。

su - $USER -c "$SIDEKIQ_STOP_CMD"

「プロセスは存在しません」エラーで終了し、スクリプトは続行されません(次のエコーステートメントは表示されません)。プロセスがもう存在しなくてもスクリプトを実行し続けるにはどうすればよいですか?

答え1

errexit設定をオフにせずにバイパスする簡単な方法は、コマンドを成功させることです。

例:

set -e
false  # script exits here

そして

set -e
false || true   # script no longer exits

だから試してみてください。

su - $USER -c "$SIDEKIQ_STOP_CMD" || true

関連情報