Cronjob이 제대로 실행되지 않습니다.

Cronjob이 제대로 실행되지 않습니다.

이 sh 스크립트가 있습니다.

ufw allow 27017 && iptables -F

test.sh 파일에서

다음과 같이 루트의 cronjob을 사용하여 매일 07:00에 실행하고 싶습니다.

0 7 * * * /root/cron/test.sh

또한 이 스크립트가 실제로 grep CRON /var/log/syslog를 사용하여 실행되는지 확인했으며 실행되는 것을 볼 수 있습니다.

8월 24일 07:00:01 vps118774 CRON[1672]: (루트) CMD (/root/cron/test.sh)

이제 내 문제는 test.sh의 실제 스크립트가 해당 cronjob을 사용하여 실행 중인 포트의 잠금을 해제하기 위해 올바르게 실행되지 않는다는 것입니다. 요점은 다음을 사용하여 서버의 터미널에서 스크립트를 수동으로 실행하는 것입니다.

sh script.sh

모든 것이 잘 작동하고 스크립트가 필요한 작업을 수행하므로 스크립트가 예상대로 실행되지만 cron 실행에 문제가 있습니까?

실행 로그를 넣었더니 다음과 같은 결과가 나왔습니다.

루트/cron/test.sh: 2: /root/cron/test.sh: ufw: 찾을 수 없음

답변1

Cron 작업은 일반적인 대화형 쉘 환경과 다를 수 있는 쉘 환경에서 실행됩니다. 예를 들어, 이 PATH변수에는 다양한 디렉토리 목록이 포함될 수 있으며 유틸리티 실행에 익숙한 일부 디렉토리가 누락될 수 있습니다.

ufw유틸리티가 어디에 있는지 알아낸 command -v ufw다음(명령줄에서 사용)

  1. 스크립트에서 유틸리티의 전체 경로를 사용하거나
  2. 유틸리티(및 )를 찾을 수 있는 디렉토리가 PATH포함되도록 스크립트 내의 변수를 수정합니다 .ufwiptables

질문에서 알 수 있듯이 스크립트에 올바른 #!- 줄이 없습니다. 명시적으로 실행하면 문제가 되지 않지만 shcron 작업 사양에서는 그렇게 하지 않습니다. 대신 스크립트를 실행 가능하게 만들고 다음과 같이 작성하십시오.

#!/bin/sh

PATH="$PATH:/usr/sbin:/sbin"

ufw allow 27017 && iptables -F

그런 다음 지금처럼 crontab에서 스크립트를 호출하세요.

여기에는 스크립트에서 이 작업을 수행하는 방법을 보여주기 위해 /usr/sbin두 개의 디렉토리와 변수도 추가 /sbin했습니다 .PATH

관련 정보