cron을 통해 스크립트를 실행할 때“명령을 찾을 수 없습니다”


29

crontab에서 스크립트를 실행하고 싶지만 몇 가지 문제가 있습니다 ...

내 스크립트에서 다음 명령을 실행합니다.

db2 connect to myDB2

db2inst1 사용자 로 실행할 때 제대로 작동 하지만 db2inst1 crontab 에서이 스크립트를 실행할 때 다음을 얻습니다.

db2 : 명령을 찾을 수 없습니다.

이 문제를 어떻게 해결할 수 있습니까?

답변:


43

명령에 대한 절대 경로를 입력하지 않기 위해 쉘은 $PATH환경 변수를 도입했으며 , 각 디렉토리는 a로 구분되며 :검색은 왼쪽에서 오른쪽으로 수행됩니다. cron종종이 $PATH변수를 포함한 전체 환경을 지 웁니다 . 따라서 스크립트는 쉘의 동작과 비교하여 cron에서 다르게 동작 할 수 있습니다.

절대 경로 사용

실행 which db2으로 db2inst1사용자하면 전체 경로 얻기 위해 db2프로그램을. 출력이 /usr/bin/db2인 경우 cron 명령은 다음과 같습니다.

/usr/bin/db2 connect to myDB2

PATH 변수 설정

실행 echo "$PATH"으로 db2inst1사용자하면 얻을 $PATH변수 및 확인이 변수가 너무 당신의 크론 스크립트에서 사용할 수 있습니다합니다. 예를 들어, 출력이 인 경우 /usr/local/bin:/usr/bin:/bin쉘 스크립트 맨 위에 다음 행을 넣습니다.

export PATH="/usr/local/bin:/usr/bin:/bin"

8

https://askubuntu.com/a/23438/227839 에 답변 된 PATH대로 쉘 스크립트에서 설정해야합니다 .

#!/bin/bash
PATH="/usr/local/bin:/usr/bin:/bin"

# rest of script follows

또는 crontab 파일에서 모든 cron 작업에 적용됩니다.

PATH="/usr/local/bin:/usr/bin:/bin"
0 1 * * * db2 connect to myDB2

감사합니다, 도움이되었습니다!
야마시로 리온

3

db2myDB2 가 무엇인지 정의해야하며 , 그렇지 않으면 실행하려는 ' file '또는 ' application ' 의 절대 위치를 사용하십시오 .

예:

/bin/rm /home/ubuntu/a.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.