한 명 이상의 사용자에 대해 cron 작업을 일시적으로 비활성화하는 방법은 무엇입니까? 특히, 나는 사용자의 cron 권한을 일시 중지하고 싶지 않습니다. 단지 어떤 작업에서도 사용자를 해고하지 않는 것뿐입니다.
SLES 11 SP2 및 SP3 시스템을 사용하고 있습니다.
답변1
(이 답변은 systemd 이전에 작성되었습니다. 이 경우 systemd 버전의 cron이 어떻게 작동하는지 확인하지 않았습니다.)
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$username
그러면 문제가 해결될 것입니다. 사용 및 복원 chmod 600
( touch
cron이 다시 로드하도록 하려면 파일의 mtime을 변경해야 함).
적어도 Debian에서는, 그리고 아마도 일반 Vixie cron에서는 chmod 400 /var/spool/cron/crontabs/$username
이것이 가능합니다. 해당 구현에서는 권한이 정확히 600이어야 한다고 주장하기 때문입니다. 그러나 이는 사용자가 명령을 실행할 때까지만 지속됩니다 crontab
.
강력한 접근 방식을 원한다면 일시적으로 crontab을 제거하거나 권한을 변경하는 것보다 더 좋은 방법은 없다고 생각합니다.그리고에 추가하세요 /etc/cron.deny
.
답변2
다음과 같이 사용자 crontab을 비활성화하는 것은 어떻습니까?
crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]
다시 활성화하십시오.
crontab -u [username] /tmp/[username].cron.tmp
여기에는 루트 없이 해당 사용자로 실행할 수 있다는 추가 이점이 있습니다(-u 매개변수만 제거하면 됩니다).
답변3
cron
일정 기간 동안 모든 작업을 완전히 중지하려는 경우 (예: 시스템 유지 관리를 수행하는 동안 원하지 않는 상호 작용을 할 수 있는 경우) 일반적으로 명령은 다음과 같습니다.
sudo systemctl stop crond.service
그리고, 복원
sudo systemctl start crond.service
그러나 일부 시스템에서는 다음을 cron.service
통해 crond.service
이를 확인할 수 있습니다.
$ systemctl list-units --type=service | grep cron
특정 질문에 대해서는 약간 과잉이지만 "원스톱 쇼핑"을 제공하고 파일 시스템이나 임시 파일을 사용할 필요가 없습니다. 단일 사용자 계정을 사용하는 소규모 임베디드 시스템(Raspberry Pi, Beagle Bone 등)에도 적합합니다.
답변4
당신은 또한 사용할 수 있습니다
crontab -l | sed '/^\s*[0-9\*]/s/^/#---inserted-by-my-script---/' | crontab
그리고 다시 활성화
crontab -l | sed 's/^\#---inserted-by-my-script---//'| crontab
첫 번째 줄은 #---inserted-by-my-script---
각 줄 앞에 활성 크론탭을 추가하고, 두 번째 줄은 이를 다시 제거합니다. 임시 복사본을 사용한 후 실행할 때의 문제점 crontab -r
은 두 번 사용할 수 없다는 것입니다. crontab을 삭제하고 실수로 crontab의 기존 임시 복사본을 빈 복사본으로 덮어쓴 경우 백업이 없습니다.