cron의 스크립트에서 명령을 찾을 수 없습니다.

cron의 스크립트에서 명령을 찾을 수 없습니다.

데이터베이스를 덤프하고 SQL 파일을 Swift에 업로드하는 스크립트가 있습니다. 터미널에서는 잘 실행되지만 cron에서는 실패하는 스크립트에 문제가 있습니다.

/usr/local/bin/swift디버깅을 한 후에 스크립트에서 해당 명령을 찾을 수 없다는 것을 발견했습니다 .

이것은 내 crontab 항목입니다.

*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup  

내가 시도한 것은 다음과 같습니다.

  1. swift다음의 전체 경로를 사용하십시오./usr/local/bin/swift
  2. /etc/profilebash 스크립트를 실행하기 전에 스크립트를 실행하십시오.

이 문제를 어떻게 해결할 수 있나요?

답변1

Cron은 사용자와 동일한 환경에서 실행되지 않습니다. 다음을 수행하면 무슨 뜻인지 알 수 있습니다.

터미널 프롬프트에 입력 env하고 출력을 기록해 둡니다.

그런 다음 이와 같은 크론 작업을 설정하고 그 출력을 이전 작업과 비교합니다.

*/5 * * * * env > ~/output.txt 

사용자와 동일한 변수가 crontab없기 때문에 문제가 발생할 가능성이 가장 높다는 것을 알게 될 것입니다 . PATH해결책으로 (postgres 사용자로부터) echo $PATH결과를 crontab의 첫 번째 줄에 복사할 수 있습니다(이와 같은 것).

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/jbutryn/.local/bin:/home/jbutryn/bin

또는 좀 더 구체적으로 설명하고 싶다면 다음을 추가하면 됩니다.

PATH=$PATH:/usr/local/bin

그러나 나는 일반적으로 이 작업을 수행하지 말아야 할 타당한 이유를 듣지 못했고 그렇지 않으면 이 문제가 다시 발생할 수 있기 때문에 항상 사용자의 PATH를 crontab에 넣습니다.

답변2

가장 흔한 일을 하셨군요예약된 작업 오류. 특정 환경을 사용하는 경우 $PATH에 경로를 추가합니다.

# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/usr/sbin:/usr/bin:/script
export PATH

또한 cron 로그(/var/log/cron 또는 /var/log/syslog)를 확인하세요. 그리고 바이너리에 대한 사용자의 권한을 확인하십시오.

관련 정보