cron으로 시작된 프로세스를 모니터링하거나 종료하는 방법은 무엇입니까?

cron으로 시작된 프로세스를 모니터링하거나 종료하는 방법은 무엇입니까?

시스템 스케줄러에 의해 지정된 간격으로 실행되는 봇이 있습니다. 그러나 때로는 일부 논리 오류로 인해 이러한 봇을 수동으로 중지해야 합니다. 스케줄러에서 실행 중인 이러한 프로세스를 찾아 종료하려면 어떻게 해야 합니까?

답변1

이름으로 프로세스를 종료할 수 있습니다. 예를 들어, Linux, *BSD 및 Solaris에서는 pkill myprogram이름에 (정확한 일치를 위해)가 포함된 모든 프로세스를 종료합니다. 루트가 아닌 사용자로 실행하면 해당 사용자의 프로세스만 종료되며 일치를 제어할 수 있는 추가 옵션이 있습니다(자세한 내용은 시스템 설명서 참조).myprogrampkill '^myprogram$'

스케줄러에 의해 시작된 프로세스를 구체적으로 대상으로 지정하고 프로세스를 수동으로 종료하려는 경우 ps f(Linux에만 해당) 또는 pstree(Linux에만 해당) 또는ptree트리에 프로세스를 표시하고 cron에 의해 시작된 프로세스를 확인하세요.

홈브류 방법을 통해 이러한 프로세스를 자동으로 종료하려면 프로세스 ID를 파일에 저장하도록 하십시오. 이런 종류의 파일을pid 파일프로세스의 단일 인스턴스만 실행하는 데 사용되는 경우(원하는 것일 수도 있고 아닐 수도 있음). 여러 인스턴스를 원하는 경우 PID를 공통 디렉터리의 별도 파일에 저장하세요. 다음은 이를 수행하는 셸 조각입니다.

pid_dir=/var/run/myprogram # must have been created e.g. at boot time
myprogram &
pid_file=$pid_dir/$!.pid
touch "$pid_file"
wait
rm "$pid_file"

런어웨이 프로세스를 감지하기 위한 엄격한 기준이 있는 경우 더 나은 솔루션은 범용 모니터를 사용하거나 간단한 경우에는 프로세스 실행이 허용되는 시간을 제한하는 것입니다. 다음 링크가 도움이 될 수 있습니다.

답변2

PID($$)를 생성한 후 파일에 넣는 것이 좋습니다. 그런 다음 이를 사용하여 프로세스를 종료할 수 있습니다.

답변3

무한 루프나 기타 오류 조건을 찾기 위해 대부분의 프로그래밍 언어에서 사용되는 기본 try/catch 분기가 작동해야 합니다. 정지를 모니터링하기 위해 프로세스에 비활성/응답 없음 타이머가 있을 수 있습니다.

관련 정보