Crontab이 쉘 스크립트를 실행하고 있지 않습니다.

Crontab이 쉘 스크립트를 실행하고 있지 않습니다.

alex내가 만든 계정을 사용하여 :

~/pocketmine/pocketmine.sh

동일한 계정을 사용하여 이 명령을 수동으로 실행하는 경우 alex:

cd pocketmine
./pocketmine.sh start

잘 작동합니다.

나는 이것을 다음에 추가했습니다 /etc/crontab:

16 15    * * *   alex /home/alex/pocketmine/pocketmine.sh start

그리고 15:16에는 작동하지 않습니다.

누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있나요?

답변1

일반적으로 /etc/crontab명령을 사용하는 것이 직접 편집하는 것보다 쉽습니다 crontab. 루트가 아닌 사용자의 crontab을 변경하는 구문은 플랫폼마다 다릅니다. 예를 들어 Red Hat Enterprise Linux에서는 다음과 같습니다.

# crontab -e -u alex

AIX, HP-UX 및 Solaris의 경우:

# crontab -e alex

cron.allow작업을 실행하려면 이 사용자를 추가해야 할 수도 있습니다 .

작업이 실행되지 않는 이유에 대한 자세한 정보는 크론 로그에서 찾을 수 있으며 위치는 다양합니다.

편집: 질문에 직접 대답하려면 cron 데몬을 다시 시작하지 않았기 때문에 직접 편집이 작동하지 않을 수 있습니다. crontab이것은 귀하에게 제공되는 많은 귀중한 서비스 중 하나입니다.

답변2

스크립트가 셸의 명령줄에서 실행될 때 제대로 실행되지만 셸에서 실행되지 않으면 cron실행 중인 환경에 문제가 있을 수 있습니다. 다음을 추가해 보세요.cron

2> /tmp/error.txt 

실행하지 않을 문의 끝으로 이동하여 cron실행 중에 어떤 오류가 발생했는지 확인하세요. 명령을 실행 cron하고 파일의 내용을 읽습니다 /tmp/error.txt.

rsync파일에서 문제가 발생하면 cron파일에 다음과 같은 출력이 표시됩니다 error.txt.

ld.so.1: rsync: fatal: libiconv.so.2: open failed: No such file or directory.

문제는 명령을 실행하는 데 필요한 라이브러리를 찾을 수 있는 환경이 설정되어 있지 않다는 것입니다. 내 프로필을 사용하여 셸에서 스크립트를 실행하면 스크립트가 올바르게 실행되기 때문에 변수를 파일의 변수와 동일한 값 LD_LIBRARY_PATH으로 설정하기 위해 스크립트 시작 부분에 환경 변수 설명을 추가했습니다 .LD_LIBRARY_PATH.profile

"export LD_LIBRARY_PATH="/usr/lib:/usr/local/lib"

그 후 모든 것이 순조롭게 진행되었습니다. 내 rsync프로그램에 코드가 부족 /usr/local/lib해서 해당 영역에 대한 참조가 내 문제를 해결한 것 같습니다. 스크립트에서 다른 파일을 참조할 때 전체 경로를 사용하지 않으면 다른 경로 문제가 발생할 수도 있습니다.

관련 정보