2012-01-16 13 views
6

私はUNIXを初めて使いました。私はこのようなスクリプトで私のJavaアプリケーションを開始したい:シェルスクリプト(Debian)を使ったJavaアプリの起動と終了

これはおそらく動作しています。それはアプリを実行し、それはpidファイルを作成します。私はこれが含まれている別のスクリプトを使用してプロセスを停止しようとすると、しかし:

#!/bin/sh 
kill -9 /var/run/ScriptCheck.pid 

コンソールには、私は、このエラーを与える:

bash: kill: /var/run/ScriptCheck.pid: arguments must be process or job IDs 

私の最高の推測では、私は右のコードを書いていないよということです停止スクリプトで、.pidファイルを開くための適切なコマンドを与えていない可能性があります。 ご協力いただければ幸いです。

答えて

12

それは(プロセスへのID)番号を期待するときには、これだけそのファイルからプロセスIDを読み、killに渡し、killへの引数としてファイル名を渡している:迅速

#!/bin/sh 
PID=$(cat /var/run/ScriptCheck.pid) 
kill -9 $PID 
+0

ありがとうございました!これはちょうど私が探していたものです:) – rMaero

+1

レコードのために、あなたは '$(cat file)'の代わりに '$( Kevin

+0

shで動作しない、bashで動作し、catを使う方が良い – milan

0

私はScriptCheck.pidファイル(最初の行にプロセスのPIDを持つエントリが1つしかないと仮定しています)の内容を読む必要があると思います。

#!/bin/sh 
procID=0; 
while read line  
do  
    procID="$line"; 
done </var/run/ScriptCheck.pid 
kill -9 procID 
+0

私はあなたがそこに書いたwhileループを理解していない、そしてそれはまだ働いていないでもそれと。コンソールは今同じものを表示しています.. また、私はpidファイルの内容を読む必要があると思うが、それは私が何をするか分からない。 – rMaero

+0

それでも動作しない、あなたは 'kill'で' $ procID'を補間しなければならない。 – tripleee

0

自分のPIDを作成する必要はありませんでした。あなたの質問は面白かったです。ここで

私が見つけたのbashのコードスニペットです:

#!/bin/bash 

PROGRAM=/path/to/myprog 
$PROGRAM & 
PID=$! 
echo $PID > /path/to/pid/file.pid 

あなたは多くの記事で--referenced実行/の/ varにあなたのfile.pidを置くためにroot権限を持っている必要があります - ですなぜデーモンにroot権限があるのか​​。

この場合、あなたのpidは、開始スクリプトと停止スクリプトに分かれています。たとえば、pidファイルが存在するという事実を利用することができます。たとえば、同じプロセスを2回実行することを許可しないなどです。

$ PROGRAM &は、スクリプトをバックグラウンドの「バッチ」モードにします。

スクリプトが終了した後にプログラムをハングアップさせたい場合は、nohupで起動することをお勧めします。これは、スクリプトがログアウトしたときにプログラムが終了しないことを意味します。

私はチェックしました。 PIDはnohupで返されます。

2

そして、汚い方法は次のようになります。あなたの構文が間違っている

kill -9 $(cat /var/run/ScriptCheck.pid) 
2

killは、プロセスID、いないファイルを取ります。あなたが何をしているかを絶対に知らない限り、kill -9を使用しないでください。

kill $(cat /var/run/ScriptCheck.pid) 

または

xargs kill </var/run/ScriptCheck.pid 
関連する問題