특정 cron을 강력하게 비활성화합니다. {hourly, daily, weekly} 스크립트


25

내가 관리하는 다양한 시스템에는 일반적으로 사용되는 /etc/cron.{hourly,daily,weekly}레이아웃을 통해 실행되는 cron 스크립트가 있습니다. 내가 알고 싶은 것은 일반적인 'disable this script'기능이 있는지 여부입니다.

분명히, 주어진 디렉토리에서 무언가를 삭제하면 디렉토리가 비활성화되지만 더 영구적 인 해결책을 찾고 있습니다. 삭제 /etc/cron.daily/slocate하면 updatedb내 가정용 컴퓨터 에서 밤마다 사용하지 않도록 설정 slocate되지만 ( 사용하지 않는 곳 ) 다음 번에 slocate 패키지를 업그레이드 할 때 다시 나타날 것이라고 확신합니다.

내가 가장 관심이있는 두 배포판은 Gentoo와 OpenSUSE이지만 널리 구현 된 메커니즘이 있기를 바라고 있습니다. 내가 가지고있는 두 배포판은 vixie-cron을 사용합니다 (확실하지는 않습니다).

답변:


45

chmod -x scriptname스크립트를 비활성화 할 수 있지만 파일은 그대로 둡니다.


5
패키지 관리 시스템에 의해 취소되거나 취소되지 않을 수 있습니다. 당신은 수행하여이보다 강력한 만들 수 chattr +i scriptname애프터 chmod.
— mc0e

@ mc0e 불변 파일에 대해 가르쳐 주셔서 감사합니다. 그러나 누군가가 한 번 말했듯이 , 그들은 무섭습니다 . 내가 한 일을 잊어 버린 경우 매우 실망스러운 문제가 발생할 수 있습니다.
— Jonathan Y.

2
@JonathanY .: 그게 다야 lsattr- 무서운 것을 제거하는 것입니다 (파일의 속성을 나열합니다).
— 추후 공지가있을 때까지 일시 중지되었습니다.

1
DW는 확실하지만, 무언가 내가 (실제로 연결된 스레드에서와 같이) 잘못된 것으로 잘못되었을 때 파일 속성을 보는 것은 여기서 중요한 차입니다.
— Jonathan Y.

@JonathanY. 이제 당신은 알고 있습니다. :-) 어쨌든, 링크 된 스레드의 'scary'비트는 chattr 자체가 아니라 팩맨 버그를 나타냅니다.
— mc0e

9

run-parts는 이름에 점이있는 작업을 실행하지 않으므로

mv /etc/cron.d/job /etc/cron.d/job.disabled

트릭을 할 것입니다.


1
불행히도 그것은 프로그램을 업그레이드 할 때 같은 문제가 있습니다-cron 작업이 존재하는지 확인하고 원래 이름으로 존재하지 않기 때문에 다시 생성됩니다.
— Jenny D는 Monica Reinstate Monica가

2
프로그램을 업그레이드 할 때 되돌아 오는 것은 사용중인 패키지 도구의 부작용이며 간단한 방법으로 해결할 수 없으며 Cron의 결함이 아닙니다. 일부 패키지 시스템은 이전 파일을 압축 해제하고 다른 패키지 시스템은 새로운 파일과 오래된 파일을 비교하여 검토 할 변경 사항이 있는지 묻습니다. 그럼에도 불구하고 의도하지 않은 동작을 일으키는 업데이트는 실망 스럽지만이 시점에서 유닉스 시스템 관리의 일상적인 부분입니다. 각 개별 환경에 미치는 영향에 대한 모든 변경 사항을 정기적으로 검토하기에는 너무 많은 패키지가 너무 빨리 움직입니다.
— peelman

데비안에서는 파일 전환 이라는 개념이 있습니다. 즉, 패키지 관리자가 파일을 관리하는 동안 파일의 이름을 효과적으로 바꿀 수 있습니다. 젠투 및 / 또는 SUSE에도 비슷한 메커니즘이 있습니까?
— 베이스

9

일반적으로 다음 과 같은 줄 cron.daily을 /etc/crontab통해 호출됩니다.

run-parts --report /etc/cron.daily

man run-parts 옵션을 제공합니다.

run-parts --test /etc/cron.daily 실행하지 않고 실행 된 작업을 표시합니다.

나는 하위 디렉토리를 'Disabled'로 만들고 작업을 그곳으로 옮기는 것을 선호합니다.

어쨌든 패키지를 업데이트하면 작업이 다시 시작되거나 제거 된 'x'비트가 복원 될 수 있습니다


1

slocate 패키지를 사용하지 않으면 제거 할 수 있습니다.


그것은 단지 예일 뿐이지 만 여전히 좋은 조언입니다. 감사합니다. (나는 무언가가 slocate에 달려 있다고 생각했지만 아무것도 보이지 않았다.)
— benizi

slocate를 제거하고 대신 mlocate를 설치하십시오. 훨씬 낫다.
— mc0e

1

cfengine ( https://cfengine.com/ )을 사용하면 disable로이를 수행 할 수 있습니다. 호스트 그룹에 대한 약속 파일을 작성하기 만하면 다음 cfagent 실행에 적용됩니다. 꼭두각시 나 요리사 등으로하는 것도 매우 간단합니다.


흥미 롭군 구성 관리 도구는 접선에 불과했습니다. 나는 일반적인 "나는 임의의 유닉스 계열 시스템을 가지고있다"라는 해결책을 찾고 있었다.
— benizi

1

/etc/cron.daily et. 알. 스크립트는 run-parts라는 스크립트에 의해 실행됩니다. 그 스크립트는 다릅니다. 예를 들어 위에서 언급 한 --test 스위치는 현재 사용중인 시스템에 없습니다.

Run-parts는 bash 스크립트입니다. 인수로 지정된 디렉토리에서 모든 스크립트를 실행하는 데 일반적으로 유용한 도구입니다. 일반적으로 / usr / bin / run-parts에 있습니다.

실행할 항목을 결정하기위한 논리가 복잡합니다. 이 코드는 귀하의 질문에 대한 답변을 담고 있지만 너무 다양합니다. 따라서 안전을 위해 코드를 읽어야합니다.

내가보고있는 버전에는 <foo> 디렉토리에서 작업 할 때 <foo> /jobs.deny를 확인하는 논리가 있습니다. 존재하는 경우 해당 파일에 언급 된 스크립트를 한 줄에 단독으로 실행하는 것을 거부합니다. 이 기능이 있다고 가정하면 설치하는 패키지가 설치되거나 업그레이드 될 때 계속 작동하기 때문에 훌륭합니다.


0

RHEL 및 파생 ( crontabs패키지 를 제공하는 )을 처리하는 경우 jobs.deny파일에 이름을 입력하여 명시 적으로 작업을 비활성화 할 수 있습니다 .

에서 크론 탭 / 실행 - 부품 man 페이지 :

다른 allow / deny 구성 파일과 유사한 작업 jobs.allow 또는 jobs.deny 파일을 작성하여 파일 실행을 허용하거나 거부 할 수 있습니다. 파일은 지정된 디렉토리에 작성해야합니다.

예 /etc/cron.daily/jobs.deny는이 스크립트의 실행을 금지하는 0logwatch를 포함 할 수 있습니다.


-1

사용자 crontab도 원하지 않으면 서비스 목록에서 크론을 비활성화하십시오.

데비안과 데비안 기반의 버전에서 이것은 단순히 /etc/rcX.d (런레벨 X의 경우)에서 심볼릭 링크를 제거하기 만하면됩니다.

SUSE 또는 Gentoo에서 서비스를 처리하는 방법을 모르겠습니다.


4
그건 나쁜 생각입니다. cron을 모두 비활성화하면 logrotate, updatedb, 무인 업그레이드 및 표준 백업과 같은 유용한 유지 관리 작업이 비활성화됩니다.
— Tobu

Updatedb는 정확히 비활성화하려는 작업입니다 (slocate를 위해 db를 업데이트합니다). 그럼에도 불구하고 일반적으로 나쁜 조언입니다.
— benizi

미안 귀하의 질문을 잘못 읽었으며 단일 특정 시스템이 아닌 모든 시스템 특정 크론 작업을 비활성화하려고한다고 생각했습니다.
— jishi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.