1

私が起こらなければならないこと:PHPは、root権限がバックグラウンドで実行されているサーバーアプリを起動する必要があります。このすべては沈黙する必要があります。

-phpがroot権限を必要とする操作を実行できるようにするには、Sudoが必要です。

-プロセスを開始したWebページの範囲外でアプリを実行するには、画面が必要です。

-画面に実行するポイントがあるように期待する必要があります

-実行を開始するものはすべて、おそらく&演算子を使用してバックグラウンドで処理する必要があるため、Shが必要です。PHPページが何も返さないようにするため、出力を/ dev /null/にパイプする必要もあります。誰かがPHPで呼び出しを行うためのより良い方法を考えることができれば、これはおそらくどういうわけか交渉可能です(フォーク...?)

例として、私が使用しようとしたスクリプトは次のとおりです。

#!/usr/bin/expect -f
spawn sh ( screen -t srcds /usr/local/srcds_l/startserv )& > /dev/null
exit 0

参考までに、Counter-Strike Sourceサーバーを起動しようとしています。startservは、サーバーの起動とその出力の収集を処理するCコードの名前です。誰かがそのスニペットの私の構文を修正できますか、またはなぜそれが間違っているのか教えてもらえますか?

4

3 に答える 3

1

この状況は、フォークとプロセスグループコントロールを使用してプロセス自体をデーモン化し、PHPにsudoを含むシステムコールを実行させるだけで最終的に解決されました。

私は最終的に見つけた別の同様の状況がありました

unbuffer -p

これは内部でscreenを使用し、screenに期待して実行させることを最初に考えていたような作業を実行します。

于 2010-11-01T18:37:49.000 に答える
0

完全な解決策はありませんが、画面ではなくnohupを確認することをお勧めします。これにより、Expectの必要性もなくなります。

于 2010-08-28T00:26:26.230 に答える
0

これは、1ビットの情報を伝達するための膨大なオーバーヘッドです(「今すぐ始めてください」)。PHPを忘れると、他のすべての従属要件が失われます。

これを行おうとすると、おそらく、TCPポートで「開始」コマンドをリッスンし、プロセス自体をフォークするperlスクリプトを作成します。これにより、sh、expect、screen、およびsudoの必要性がなくなります。

于 2010-08-28T00:28:35.053 に答える