쉘 스크립트에서 cron을 통해 실행 중인 프로세스를 종료하는 방법은 무엇입니까?

쉘 스크립트에서 cron을 통해 실행 중인 프로세스를 종료하는 방법은 무엇입니까?

cronjob에서 실행되는 쉘 스크립트가 있습니다. 쉘 스크립트는 실행 중인 프로세스를 종료하고 새 프로세스를 다시 시작해야 합니다.

스크립트를 수동으로 실행하면 제대로 작동하지만 cron을 통해 실행하면 이전 프로세스가 종료되지 않고 이전 프로세스와 함께 새 프로세스가 시작됩니다.

프로세스를 종료하기 위해 다음 코드 줄을 사용하고 있습니다.

kill -9 ps | grep "server1" | grep -v grep -v awk '{ 인쇄 $1 }'

답변1

무엇을 죽일지 지정해야 합니다.

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

다음 트릭을 사용할 수도 있습니다.

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

답변2

내부에가장 순수한사용할 수 있는 양식

pkill server1

이는 server1명령줄의 어딘가가 아니라 실제로 프로세스 이름이라고 가정합니다. 그렇지 않으면 -f.

pkill -f server1CommandArgument


하지만 기다려!

당신은 할 수pkill일치하는 항목 테스트그리고 명령으로 죽이십시오 pgrep. 이것은 기술적으로 거의 동일합니다. 차이점은 다음과 같습니다. 살인이 아닙니다.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

답변3

쉘 스크립트에서도 이를 건너뛰어야 합니다 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 프로세스를 강제 종료합니다.전체 설명을 보려면 기사를 읽어보세요.

관련 정보