web-dev-qa-db-ja.com

cronを介して実行されているシェルスクリプトでプロセスを強制終了する方法

Cronjobで実行するシェルスクリプトがあります。このシェルスクリプトは、実行中のプロセスを強制終了し、新しいプロセスを再開する必要があります。

スクリプトを手動で実行すると完全に正常に動作しますが、cronを介して実行すると、古いプロセスが強制終了されることはなく、古いプロセスとともに新しいプロセスが開始されます。

以下のコード行を使用してプロセスを強制終了しています:

-9 psを殺す| grep "server1" | grep -v grep | awk '{print $ 1}'

5
user3887720

あなたは何を殺すかを示さなければなりません:

kill -9 $(ps | grep "server1" | grep -v grep | awk '{ print $1 }')

あなたはトリックを使うこともできます:

kill -9 $(ps | grep "server[1]" | awk '{ print $1 }')
4
fedorqui

purestの形式では、

pkill server1

これは、server1が実際にはプロセス名であり、コマンドラインのどこかにあるとは限りません。それ以外の場合は、-fを追加します。

pkill -f server1CommandArgument


でも待ってください!

pkillが一致するものをテストして、コマンドpgrepでkillできます-これは技術的にはほとんど同じです。違いは、それを殺す代わりにPIDを出力するです。

これらを試してください-一致するPIDをリストします。

pgrep server1

-lは、PIDだけでなくプロセス名もリストします。

pgrep -l server1

-fコマンドラインに一致、名前だけでなく:

pgrep -fl server1

pgrepに一致するプロセスを強制終了する場合は、-lを省略して、デフォルトのSIGTERM以外のものが必要な場合は、信号を追加します。-15

pkill -9 server1

例では、デフォルトで現在の端末のプロセスのみに一致する単純なpsコマンドを使用しているため、pgreppkillは一致しないため、コマンドで一致するものに注意してください現在の端末のプロセスのみを照合します。


kill -9を使用する際の注意事項-これは殺すための最も激しい方法;です。 実際に必要ですか?

殺したプログラムの種類によっては、問題にならない場合もあります。ただし、データファイルを保存したり、ロックファイルを書き込んだりする可能性のあるプログラム/サーバーに対しては、正当な理由なしにこれを行うべきではありません。プログラムがひどくハングしない限り、デフォルトの信号を使用してkill-15はそうします。

4
Volker Siegel

シェルスクリプト内では、shもスキップする必要があります。以下のコマンドは私のために働きました。

ps -aef | grep $1 | grep -v sh| grep -v grep| awk '{print $2}'

脚本:

#!/bin/bash
var=`ps -aef | grep $1 | grep -v sh| grep -v grep| awk '{print $2}'`
if [ !-z "$var"]
then
  echo $1 process is not running 
else
  kill -9 $var
  echo $1 process killed forcefully, process id $var.
fi

参照: シェルスクリプトでのLinuxプロセスの強制終了 は、詳細な説明について記事に目を通すことができます。

0