CRON을 사용하여 스크립트를 실행하는 적절한 방법?
문제
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에서 실행할 필요가 없습니다).
문안 인사