문제

CRON으로 스크립트를 실행할 때 내부에 호출 된 실행 파일에는 전체 경로가 있어야합니다. 나는 이것을 실행하려는 것을 발견했다 불가사의 한 사람, TC를 호출하려고 할 때 많은 오류가 나타 났을 때. 제 질문은이 문제를 극복하는 올바른 방법은 무엇입니까?

가능한 해결책:

  • 실행 파일 폴더에 대한 CD 및 기타 실행 파일에 대한 상징적 링크를 준비하십시오 (작동하는지 확실하지 않음 - 휴대 성이 낮음)
  • 스크립트에서 전체 경로를 사용합니다 (작동 - 다른 배포판의 낮은 휴대 성)
  • 스크립트 내부의 필요한 경로로 경로 변수를 내보내기 (작동하는지 확실하지 않음)

글쎄, 누구나 도와 주셔서 감사합니다.

도움이 되었습니까?

해결책

CRON 작업 내부의 변수를 선언하는 것은 더 명확하고 유지 관리가 더 쉽습니다. 수정해야 할 것은 CRON 작업에 포함되며 다른 시스템으로 전송할 필요가 없습니다.

PATH=/usr/bin:/your/fancy/dir
MYAPPROOT=/var/lib/myapp

*/2 * * * * myappinpath
*/3 * * * * $MYAPPROOT/mylocalapp

다른 팁

Linux/BSD/Mac에있는 경우 다음과 같은 환경 변수를 설정할 수 있습니다. PATH 바로 crontab, 그리고 그로 당신은 일반적으로 가기에 좋습니다.

당신이 Solaris에 있다면, 나는 당신을 위해기도합니다. 하지만 나도 대답이 있습니다 : 나는 일반적으로 소스 .profile 무엇이든 실행하기 전에 :

0 0 * * 0 . /home/myuser/.profile && cd /path && ./script

당신을 염두에 두십시오, 내 .profile 잔뜩 .bash_profile 그리고 .bashrc. 소스 소스에 필요한 파일이 필요한지 확인하십시오.

CRON은 로그인을 실행하지 않으므로 .profile 및 /etc /프로파일이 제공되지 않습니다. 따라서 경로는 기대하는 값으로 설정되지 않을 수 있습니다. 나도 할거야

  • 적절한 값으로 설정 및 내보내기
  • 스크립트에서 전체 경로를 사용하십시오

Symlinks의 트릭은 가정합니다. 길에 있고 멋지지 않은 것 같습니다

내 추천 :

모든 변수를 외부 파일로 설정합니다. /etc /acpress_name 또는 이와 유사한 'Process_name.env'파일을 사용합니다. 백업 스크립트가 있다고 상상해보십시오. 그럼 당신 :

  • /etc/backup.env를 만들고 "백업"작업에 필요한 모든 환경 변수를 넣으십시오.
  • 백업 스크립트를 수정 하고이 줄을 추가하십시오 오두막:

    . /etc/backup.env #백업 환경에 대한 전체 경로 전에 점과 공간이 있습니다.

IMO이 접근법은 CRON 정의에서 변수를 선언하는 것보다 다음과 같습니다.

  • 유지하기 쉽습니다. 파일 만 편집하십시오.
  • 구성이 쉬운 구성/중앙 집중식 구성 :
    • 다양한 상황에서 스크립트를 사용할 수있는 여러.env를 가질 수 있습니다 (예 : .env에 백업 위치가 있다고 생각하면 .env 위치를 인수로 전달하고 매일 .env를 제공하여 .env가 몇 가지 위치와 함께 제공 할 수 있습니다. 다른 .env를 제공하여 다른 위치를 가진 매주.
  • .env 파일을 SVN 또는 GIT와 같은 VC에 보관할 수 있습니다.
  • 스크립트를 테스트하기가 훨씬 쉽습니다 (CRON에서 실행할 필요가 없습니다).

문안 인사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top