- - PR -
Linuxでのjavaアプリケーション強制終了コマンドについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-01 22:47
クラスパスを絶対パス指定でかけばいいだけでは。。。 | ||||
|
投稿日時: 2006-02-01 23:17
>mogeさん、ありがとうございます。
#/usr/local/oldserver/j2sdk1.4.2_05/bin/java -cp /usr/local/cmd/cmdsock.jar: /usr/local/cmd/log4j-1.2.12.jar /sock/age/Sock とすればよいのでしょうか、、、 今すぐ自分で確認できないのがつらいですね、、、 あと、もうひとつ質問があります。 サーバ起動を行うコマンド/etc/init.d/oldserverd startの中で上記のjarファイルを実行できるように したとします。 このjarファイルを実行すると無限ループに入って処理を続けているのですが、この実行中は ほかのコマンドは打てないのですか? つまり、 #/etc/init.d/oldserverd start # ←と次のコマンドを打てる状態になるのでしょうか? 聞いてばかりで本当に申し訳ありませんが、よろしくお願いします | ||||
|
投稿日時: 2006-02-02 01:59
「通信エージェント」のテスト中で、次は「起動終了」コマンドですか。
#状況わかっちゃったよ(苦笑)
要するに「通信エージェントでの、Linuxの起動終了を実装してくれ」という要求に 見えます。それは無理があります。というのも「仕様」が分からんからです。 なぜ「仕様」が必要かというと、まきさんが適当に「起動終了」を実装したとしても、 「テスト」後に運用するわけでしょ。どういう形でも。 大抵の場合、実装した人は運用しません。だから何らかの形で、 ドキュメントなりを残すことになります。 ここらへんはちゃんと「仕様化」する必要があります。ということで完全に 「コーディング」の範疇を超えています。 どんな「仕様」でも大抵の場合、実装できますけど、そもそも「仕様」が 分からない限り、結局は実装したことになりません。 で、本来は、ここらへんを相談できる人員を配置するのが普通です。というのも、 あまりに製品(「通信エージェント」)の内容に依存しすぎていて、アドバイスできないのです。 でだ。どうせそんなやつは、いないだろうから(苦笑) どういう「仕様」が正しいか。おそらく想定するに以下だろう。 1.シェルスクリプト(/etc/init.d/oldserverd)を作る。 2./etc/init.d/oldserverd start or stopして起動確認。 3.chkconfig --add oldserverd --level 35 としてLinuxに登録。 まぁ、ここらへんが基準です。 「/etc/init.d/oldserverd」の内容。 ---- #!/bin/bash # # chkconfig: 2345 90 12 # description: Socket Agent # # SocketAgent Socket Agent # Source function library. . /etc/init.d/functions PATH=$PATH:/usr/sbin SERVER=/usr/java/bin/java KILLER=killall prog="java" [ -f $SERVER ] || exit 0 start() { echo -n $"Starting $prog: " /usr/local/oldserver/j2sdk1.4.2_05/bin/java -cp /usr/local/cmd/cmdsock.jar:/usr/local/cmd/log4j-1.2.12.jar /sock/age/Sock #ここで起動方法を記述する。それはみなさんの書いてある通り。 } stop() { action "Stopping $prog:" $KILLER 2> /dev/null killall "java" #ここで停止方法を記述する。同じくみなさんの書いてある通り。 } case "$1" in start) start ;; stop) stop ;; status) status socketagent ;; restart|reload) stop start ;; condrestart) if [ -f /var/lock/subsys/canna ]; then stop start fi ;; *) esac exit 0 ----- ちなみに細かいところが不完全です。要するにRed Hat系列のサービスの 登録を行います。/etc/init.dに入っているやつを参考にする方が正しいでしょう。 まぁ、こんぐらいキーワードと方針があれば出来るだろう(きっと) だから、ちゃんと人員配置しろよ、、、、 でも、近年、できないのも良く知ってるのだが。。。。。。 | ||||
|
投稿日時: 2006-02-02 10:20
加納さん、ありがとうございます。
できなくてもやらなければダメなので、、、 みなさんのアドバイスから自分でシェルスクリプトを書いて実行してみました。 その結果ですが、 #/etc/init.d/newserverd start としたとき、 次のコマンドを打てる状態になりませんでした。 というのは、実行したjarファイルは無限ループがあり、処理が終わらないためです。 なので、他にコマンドをうつにはCtrl+Cで強制終了しなければならない状態です。 やはりこの方法ではだめなのでしょうか? ちなみにどのように書いたかというと zillollさんが教えてくださったように start時: jarファイルの実行 MYPID=$! echo $MYPID > /tmp/my.pid stop時: kill -9 'cat/tmp/my.pid rm /tmp/my.pid です。 たぶん、start時はjarファイルの実行のところでとまっていると思います。 どなたかいい方法ありましたら教えてください。よろしくお願いします | ||||
|
投稿日時: 2006-02-02 10:44
Java実行コマンドの最後に & をつけてバックグラウンドでの
実行にしないと処理のステップが移らないと思います。 [ メッセージ編集済み 編集者: zilloll 編集日時 2006-02-02 12:04 ] | ||||
|
投稿日時: 2006-02-02 13:38
> zillollさん
ありがとうございます。 &を入れたらできました。 newserverdは start) /usr/local/oldserverd/httpd $1 /usr/local/oldserverd/tomcatd $1 jarファイルの実行& プロセスIDの保存 stop) kill処理(またはkillall java) /usr/local/oldserverd/httpd $1 /usr/local/oldserverd/tomcatd $1 restart) kill処理 /usr/local/oldserverd/httpd $1 /usr/local/oldserverd/tomcatd $1 jarファイルの実行& プロセスIDの保存 としました。そうすると、start,stopをうつとうまくいきます。 ただ、restartをすると Catalina.stop: java.net.ConnectException: Connection refused java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:452) at java.net.Socket.connect(Socket.java:402) at java.net.Socket.<init>(Socket.java:309) at java.net.Socket.<init>(Socket.java:124) at org.apache.catalina.startup.Catalina.stop(Catalina.java:581) at org.apache.catalina.startup.Catalina.execute(Catalina.java:402) at org.apache.catalina.startup.Catalina.process(Catalina.java:180) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203) というエラーが表示されます。このエラーを検索してみたら、Tomcatの起動(停止?)がうまく いってないから出るエラーみたいなのですが。 どなたかこのエラーが出て対処された方はいらっしゃいますか?いらしたら教えていただきたいです。 よろしくお願いします。 | ||||
|
投稿日時: 2006-02-02 14:29
tomcatには詳しくないのですが、
restartの際、コマンドを一度しか実行していませんが、 パラメータ"restart"などで、一度で停止と起動が でるのでしょうか。 [ メッセージ編集済み 編集者: zilloll 編集日時 2006-02-02 14:39 ] | ||||
|
投稿日時: 2006-02-03 09:49
>みなさま
ご親切にご教授くださってありがとうございます。やっとできました。 /etc/init.d/newserverd を start) /usr/local/oldserver/bin/httpd $1 /usr/local/oldserver/bin/tomcatd $1 jarファイルの実行& c stop) kill `cat /tmp/new.pid rm /tmp/new.pid /usr/local/oldserver/bin/httpd $1 /usr/local/oldserver/bin/tomcatd $1 restart) kill `cat /tmp/new.pid rm /tmp/new.pid /usr/local/oldserver/bin/httpd $1 /usr/local/oldserver/bin/tomcatd $1 sleep 5 jarファイルの実行& PID=$! echo $PID > /tmp/new.pid としたらrestart時もエラーがでなくなりました。 貴重なアドバイス本当にありがとうございました。 stop) |