crontab이 한 서버에서는 실행되지만 다른 서버에서는 실행되지 않는 이유는 무엇입니까?

crontab이 한 서버에서는 실행되지만 다른 서버에서는 실행되지 않는 이유는 무엇입니까?

linode에 두 개의 서버가 있고 일부 웹사이트가 있습니다. 서버에서 mysql이 실행되고 있는지 확인하고 그렇지 않으면 스크립트가 mysql을 시작하는 스크립트를 만들었습니다. 스크립트는 두 서버 모두에 있으며 파일 구조가 동일합니다.

두 서버 모두에서 "crontab -e" 명령을 사용하여 cron에 스크립트를 추가했습니다. 문제는 내 개발 서버가 스크립트를 실행하고 프로덕션 서버는 계속 작동 중지된다는 것입니다. 문제가 아니라는 것을 알기 위해 crontab 끝에 공백을 추가했습니다.

프로덕션 서버에서 스크립트를 수동으로 실행하면 "('-p'에 대한 정보를 읽을 수 없습니다: geteuid()=1000이지만 루트여야 합니다.)"라는 오류가 발생합니다. 오류가 발생하더라도 스크립트는 mysql을 다시 시작하지만 cron을 사용하여 스크립트를 실행하면 mysql이 다시 시작되지 않습니다. 또한 개발 서버에서 스크립트를 실행했는데 동일한 오류가 발생했습니다. 오류가 있어도 스크립트는 dev에서 실행되고 cron을 통해 실행되면 mysql을 다시 시작합니다.

개발 서버에서 sudo로 명령을 실행하면 비밀번호를 묻지 않지만 프로덕션 서버에서 실행하면 비밀번호를 묻습니다.

cron 명령이 실행 중인지 확인하기 위해 syslog를 확인했습니다.

이 스크립트는 -v -u -l -n -t -p 매개변수와 함께 netstat 명령을 사용합니다.

답변1

개발 서버에서 sudo로 명령을 실행하면 비밀번호를 묻지 않지만 프로덕션 서버에서 실행하면 비밀번호를 묻습니다.

두 노드의 sudo 구성을 비교해 보셨나요? crontab을 수정한 계정에서 두 시스템 모두에서 이 명령을 실행하십시오.

sudo -l

답변2

주의할 점이 몇 가지 있습니다.

visudo를 루트로 실행하고 사용자가 나열되어 있는지 확인합니다(사용자 이름이 있는 youruser).

사용자 이름 ALL=(ALL) NOPASSWD: ALL

이렇게 하면 비밀번호 없이 sudo를 실행할 수 있습니다. 그렇지 않은 경우 이를 추가하고 스크립트를 다시 시도하십시오.

이제 여전히 cron으로 실행되지 않으면 cron 항목이 올바른 것처럼 들리지만 스크립트가 올바르지 않을 수 있습니다. 시스템 로그에 표시된 내용에 따라 크론이 실행되는 것 같습니다. chmod 755 /path/to/script.sh를 사용해 보십시오.

크론 작업을 다시 실행해 보세요.

그래도 실행되지 않으면 스크립트 소유자를 확인하세요. chown 사용자 이름/경로/to/script.sh

이것이 도움이 된다면 알려주세요.

관련 정보