cron에 의해 다시 시작될 때까지 특정 시간에 스크립트를 중지하는 방법은 무엇입니까?

cron에 의해 다시 시작될 때까지 특정 시간에 스크립트를 중지하는 방법은 무엇입니까?

OSMC(Debian 기반)를 실행하는 Raspberry Pi가 있습니다.

자정에 sync.sh 스크립트를 시작하도록 cron 작업을 설정했습니다.

0 0 * * * /usr/local/bin sync.sh

오전 7시에 스크립트를 중지해야 합니다. 현재 나는 다음을 사용하고 있습니다 :

0 7 * * * shutdown -r now

더 좋은 방법이 있나요? 재부팅이 좀 심한 것 같아요.

감사해요

답변1

다음 명령을 사용하여 실행할 수 있습니다timeout주문하다,

timeout - run a command with a time limit

Synopsis
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
timeout [OPTION]
Description

Start COMMAND, and kill it if still running after NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. 

추신. 동기화 프로세스에 너무 많은 시간이 걸리는 경우 데이터 동기화에 대한 다른 접근 방식(예: 블록 복사)을 고려할 수 있습니다.

답변2

17시간 동안 최대 절전 모드를 유지한 후 동기화가 쉽게 재개된다면 다음을 시도해 보세요.

0 0 * * * killall -CONT -g sync.sh || /usr/local/bin/sync.sh
7 0 * * * killall -STOP -g sync.sh

처음부터 동기화하려면 다음을 시도해 보세요.

0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -TERM -g sync.sh

동기화 또는 해당 하위 작업이 신호를 무시하지만 조각을 남기지 않는 경우 다음을 수행하십시오.

0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -KILL -g sync.sh

killallε여러 가지 잡다한

답변3

또한 지정된 시간에 서비스나 스크립트를 "중지"하거나 "종료"하기 위해 cron을 사용합니다.
먼저 크론 작업을 생성하여 작업이나 스크립트를 실행하세요. (다른 크론을 쉽게 실행하여 이름이 있는 작업을 종료할 수 있습니다 sudo pkill wget)

둘째, 다음 출력에서 ​​유용하고 읽기 쉬운 형식으로 실행 중인 crontab 작업을 확인하려고 합니다.

   ps -o pid,sess,cmd afx | egrep "( |/)cron( -f)?$"

첫 번째 줄에 다음과 같이 표시됩니다.

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

첫 번째 열은 PID, 두 번째 열은 세션 ID, 세 번째 열은 cron이 시작한 명령입니다. 세션 ID를 사용하여 특정 cron 작업과 관련된 모든 프로세스를 종료할 수 있으므로 위 예에서는 세션 ID 4289를 종료합니다.

   pkill -s 4289

pkill을 스크립트에 넣고 cron으로 실행해야 합니다.

관련 정보