PHPビルトインサーバをバックグラウンドで起動するシェル

まずは普通に &

通常、以下のコマンドでPHPのビルトインウェブサーバが立ち上がりますが、 Ctrl+C を押さないと止まりません。

php -S localhost:80

これをバックグラウンドで走らせておきたいケースがありましたので、コマンドの末尾に & を付けたのですが、 Stopped になってしまい、なぜか機能しませんでした。

php -S localhost:80 &
[user@xxx host]# php -S localhost:80 &
[1] 1502
[user@xxx host]# jobs
[1]+  Stopped                 php -S localhost:80

出力を /dev/null に飛ばす

手動で & 無しで実行してから Ctrl+z でバックグラウンドに追いやる方法ですと、 Stopped にならずにうまくいくようですが、自動的にシェル上でこれをしたいので、別法をとります。

php -S localhost:80 >/dev/null 2>&1 &

このように出力を /dev/null に向けてしまえばOKです。

[root@49289851a9de host]# php -S localhost:80 >/dev/null 2>&1 &
[1] 1513
[root@49289851a9de host]# jobs
[1]+  Running                 php -S localhost:80 > /dev/null 2>&1 &

Running になってますね!

終了したい時は fg #1 などとしてから、 Ctrl+c で完了です。

確認した環境

  • CentOS 7.3 on docker
  • PHP 5.4.16