특정 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.