sudo 명령을 포함하고 타이머를 사용하여 "crontab" 실행 작업을 예약하는 Bash 스크립트를 만들려면 어떻게 해야 합니까?

sudo 명령을 포함하고 타이머를 사용하여 "crontab" 실행 작업을 예약하는 Bash 스크립트를 만들려면 어떻게 해야 합니까?

내가 명명한 스크립트를 실행하려고 합니다 script1.sh.

out="/home/me/scripts/out.txt"
sudo ntpdate 99.99.99.99 >> $out

crontab으로 타이머 설정센토스 7운영 체제. 이것의 목적은 Centos 7 시간을 시간 서버와 자동으로 동기화하는 것입니다.

명령 사용

crontab –e             # (1)
sudo crontab –e        # (2)
sudo vi /etc/crontab   # (3),

각 구성 파일 (1), (2), (3)에 일정 정의 문자열을 붙여넣었습니다. 문자열은

* */1 * * *   me   /home/me/scripts/script1.sh

sudo systemctl reload crond.service그런 다음 새 구성을 구현하는 명령을 적용했습니다 .

이는 위의 일정에 따라 script1.sh매 시간마다 수행되어야 합니다 . 그러나 문제는 ntpdate에도 sudo권한이 필요하므로 script1.sh동일한 작업을 수행한다는 것입니다. 이 문제를 인터넷 검색하여 sudostart edit 명령을 사용하여 구성 파일을 편집하면 비밀번호 요구 사항을 억제할 수 있다는 것을 발견했습니다 . 그런 다음 맨 아래에 비밀번호 없는 액세스에 대한 몇 가지 권한을 추가했습니다.sudoersudo visudo

me   ALL=(ALL)   NOPASSWD:   /home/me/scripts/*
me   ALL=(ALL)   NOPASSWD:   /usr/sbin/ntpdate

처음에는 (1), (2), (3) 세 가지 모두에 정의되어 있을 때 작동합니다. 그런 다음 (2)와 (3)의 계획 정의에 주석을 달고 crontab을 다시 로드했기 때문에 작동이 멈추고 sudo 비밀번호를 묻기 시작했습니다. 그런 다음 그대로 돌아가서 아무런 효과가 없었습니다.

질문

이 작업을 수행하는 방법에 대한 힌트를 주실 수 있나요? 그것이 작동하도록 하려면 무엇을 할 수 있습니까?

답변1

사용자의 crontab을 통해 루트가 필요한 작업을 트리거하는 대신 시스템 crontab을 사용해야 합니다.필요 sudo, 왜냐하면 그 일은이미루트로 실행하십시오.

하지만 이 특별한 경우에는 기술적으로 말하면 잘못된 일을 한 것입니다. ntpdate이는 이와 같이 사용되어서는 안 됩니다. 단지 시간의 갑작스러운 점프와 지속적인 시계 드리프트를 보장하는 것일 뿐입니다.

chrony따라서 해당 스크립트를 폐기하고 적절하게 설치하십시오.구성 /etc/chrony.conf, 활성화: sudo systemctl enable --now chronyd. Chrony는 오류를 최소화하면서 시계를 NTP 서버와 동기화된 상태로 유지하려는 데몬입니다.

관련 정보