0

次のコードを使用してshファイルを実行しようとしています(CentOSマシンbtw)

Runtime.getRuntime().exec("sh " + file.getPath());

このコードをWindowsに使用していますが、正常に動作します

Runtime.getRuntime().exec("cmd /c start " + file.getPath());

.sh ファイルで Screen を使用しているためでしょうか? サーバーを起動するためにjavaコマンドも使用しているので、これらを含める必要があるのでしょうか?

shファイルの中身はこちら

#!/bin/sh
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
screen -S PrivateServer java -Xms2048M -Xmx2048M -jar somejar.jar -o true

このコードをシャットダウン フックからも実行していますが、これが問題になる可能性はありますか? これは、ソフトウェアがゲームサーバーであり、ユーザーが再起動コマンドを使用したり、自分で何もセットアップする必要なく自動再起動したりできるようにするためです。

編集:エラーをテキストファイルに出力することにしたところ、「端末に接続する必要があります」とわかりました。何か案は?これは、スクリーンの使用に関する問題だと思います。

4

4 に答える 4

1

ファイルに実行権限があることを確認したので、次のように引数を渡してみてください。

Runtime.getRuntime().exec(new String[]{"/bin/sh" ,"-c", file.getPath()});

したがって、主に完全なパスを提供してsh使用します-c

于 2013-02-21T21:46:52.620 に答える
0

このような実行には、org.apache.commons.exec。*を使用することをお勧めします。

于 2013-02-20T19:39:00.487 に答える
0

操作のパーミッションを設定する必要があります。通常、このスクリプトを Java アプリケーションから実行するには、「sh」ファイルに実行パーミッションが必要です。root (sudo su) または sudo java -jar として Java アプリケーションを実行する必要があります。または、スクリプトへのフルアクセスを「sudo chmod 777 ...」に設定します。フルアクセスではありませんが、スクリプトを実行したいユーザーには少なくとも chmod +x を設定してください。

よろしくお願いします。

于 2013-02-20T18:59:57.760 に答える
0

実行権限がないようです"chmod +x shell_script_filename"、シェルスクリプトを実行する前に実行してみてください

于 2013-02-20T19:51:00.383 に答える