명령이 닫힐 때까지 주기적으로 무기한으로 명령을 실행하는 방법은 무엇입니까?

명령이 닫힐 때까지 주기적으로 무기한으로 명령을 실행하는 방법은 무엇입니까?

종료할 때까지 몇 분마다 명령을 실행하고 싶습니다.

몇 번 검색한 후 전반부(명령을 주기적으로 무기한 실행)를 수행하는 여러 가지 방법을 찾았는데, 이 기능을 끄려면 어떻게 해야 합니까?

편집
"닫기"는 아마도 "다른 쉘 명령을 사용하여 닫으십시오"를 의미합니다.

편집
내가 실제로 하려는 작업이 무엇인지 명확히 하기 위해 실제로 PPython 프로그램을 중지하라는 명령을 내릴 때까지 주기적으로 Python 프로그램을 실행하고 싶습니다. 중지 명령을 실행할 때 실행
중인 경우를 대비하여 P먼저 현재 실행을 완료한 다음 다시 실행하지 않기를 원합니다.

답변1

Python 스크립트를 수정하거나 쉘 스크립트 래퍼를 작성하는 두 가지 옵션이 있습니다.

Python 스크립트를 수정합니다.

  1. 당신이하고 싶은 일을 반복해야합니다.

  2. INT신호( Ctrl- 에서 전송 C) 및 TERM신호( 일반에서 전송 )를 포착하려면 신호 처리기를 설치하세요 kill. 신호를 포착한 후 Python 스크립트에 다시 반복되지 않아야 함을 알리는 변수를 설정합니다. 나는 이 작업을 수행하는 방법을 알려줄 만큼 Python에 익숙하지 않습니다.

대체 솔루션: 위와 동일한 작업을 수행하지만 Python 스크립트 외부에 있는 셸 스크립트 래퍼:

#!/bin/sh

loop_again=1

trap 'loop_again=0;wait' INT TERM

while (( loop_again )); do
    echo "Kill me with 'kill -9 $$'"
    ./python_script &
    echo "Kill the Python script with 'kill $!'"
    wait
done

이 래퍼 스크립트는 Python 스크립트를 백그라운드에서 시작하고 완료될 때까지 기다립니다. 그런 다음 무기한으로 다시 시작됩니다. 또한 각 반복에서 이를 종료하는 방법과 Python 스크립트를 알려줍니다.

스크립트 kill(단순 사용 kill,아니요 kill -9) 또는 Ctrl- 를 C누르면 loop_again변수가 0으로 설정되고(현재 반복이 끝날 때 루프가 종료됨) 종료하기 전에 현재 실행 중인 백그라운드 프로세스가 완료될 때까지 기다립니다.

킬 래퍼 스크립트 (신호 처리기가 무시하거나 포착할 수 없는 신호를 보내는 것과 kill -9동일 )를 사용하는 경우 해당 스크립트는 종료되고 Python 스크립트는 자체적으로 완료될 때까지 백그라운드에서 실행됩니다.kill -s KILLKILL

답변2

watch"Loop"를 사용하여 프로그램을 반복적으로 실행하고 결과를 확인하거나 while루프를 사용해 볼 수 있습니다 . 프로세스의 PID를 가져와 echo $!이를 사용하여 killPID를 종료합니다. 예를 들어:

while :; do ./test.py; done & echo $! > /tmp/testpy.pid

다음과 같은 경우 kill을 사용하여 프로그램을 종료합니다.

kill -9 `cat /tmp/testpy.pid`

답변3

cron 작업을 생성하여 주기적으로 명령을 실행할 수 있습니다. 예를 들어, 매시간 작업을 실행하려면 다음 cron 작업을 생성합니다.

0 * * * * /path/to/your/command >/dev/null 2>&1

작업 유형 실행을 중지하고 종료하려면 ps aufx|grep yourcommand|grep -vpid입니다.

답변4

+를 누르 CTRL거나 cSIGTERM 신호를 사용하거나 보낼 수 있습니다.killkillall

관련 정보