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
기본적으로 현재 터미널의 프로세스만 일치하는 일반 명령을 사용하므로 명령이 무엇과 일치하는지 주의해야 합니다. 왜냐하면 pgrep
및 pkill
은 현재 터미널의 프로세스만 일치하지 않기 때문입니다.
사용법에 대한 참고 사항 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 프로세스를 강제 종료합니다.전체 설명을 보려면 기사를 읽어보세요.