2017-09-24 1 views
0

Linux crontab에서 일부 크롤러를 실행하려고합니다.crontab이 오류를 반환 중입니다.

이 여기

pyenv shell jake-crawler 

로 파이썬 환경에 가야는 내 crontab -e

*/10 * * * * /home/ammt/apps/crawler/scripts/bat_start.sh 

이 10 분마다 실행됩니다. 내가 파이썬 환경을 변경 init.sh이 나는 ​​bat_start.sh의 내부

(jake-crawler) [[email protected]_OM crawler]$ /home/jake/apps/crawler/scripts/bat_start.sh 
[DEBUG|run.py:30] 2017-09-24 19:55:49,980 > BATCH_SN:1, COLL_SN:1, 1955 equal 0908 = False 

를 입력 할 때이 명령 줄은 잘 작동합니다.

여기에 제가 개인적으로 명령 줄에서 실행할 때이 문제가 없습니다 내 init.sh

#!/usr/bin/env bash 

export PATH="${HOME}/.pyenv/scripts:$PATH" 
eval "$(pyenv init -)" 
eval "$(pyenv virtualenv-init -)" 

pyenv shell jake-crawler 

입니다. 하지만 cron을 실행할 때 pyenv 명령을 찾을 수 없습니다.

+1

* 개인적으로 * 실행하면 'ammt' 사용자로 실행합니까? 어떤 사용자가 cron을 실행하는 데 사용됩니까? 그것은'루트'인가? 그렇다면 왜'/ home/ammt'가 아닌'init.sh'에서'$ {HOME} '을 사용합니까? –

+0

나는 ammt를 사용했다. 명령 줄에서 $ {Home} 경로를 확인하는 방법은 무엇입니까? $ {Home}은/home/ammt로 정의됩니다. –

+0

이를 확인하려면'echo $ HOME'라고 말할 수 있습니다. 그러나, 주석에서 * ammt를 사용하여 수동으로 * 명령을 실행했는지 또는 cron을 실행하는데도 사용했는지 여부가 불분명합니다. 이걸 좀 넓혀 주시겠습니까? –

답변

0

사용자는 cron 구성 파일에서 해당 스크립트를 실행해야하는 사용자를 지정할 수 있다고 생각합니다. 스크립트가 사용자와 함께 작동하는 경우 cron 구성 파일에서 정의하십시오.

예를 들어이 답변을 참조하십시오 ... https://stackoverflow.com/a/8475757/3827004.

+1

시스템 crontab에는 계정 이름이 6 번째 필드로 지정되어야합니다. 'crontab' 명령으로 처리되는 일반적인 crontab은 그렇지 않습니다. 명령은 항상'crontab' 명령을 사용하여 작성한 사용자의 계정으로 실행됩니다. –

0

이 당신이 터미널에서 응용 프로그램을 실행할 때 diferentiate 두 가지가 있습니다, 그리고 당신은 crontab 파일에서 수행 할 때

  • 환경이 당신이 실행하지 않는 이상 경우, 동일하지 않습니다 당신의 cron 작업의 .profile 스크립트.
  • 터미널에 액세스 할 수 없습니다. Cron 작업은 터미널을 사용하지 않으므로 예를 들어 /dev/tty을 열 수 없습니다. 리디렉션을 처리하는 방법에 대해 매우 신중해야합니다. 대화 형 세션에서 실행될 때 모두 tty로 보내지 만 모두 cron(8)에서 실행하면 파이프로 리다이렉트됩니다.

이렇게하면 환경이 상당히 달라지며 일반적으로 오류의 원인이됩니다. 자세한 내용은 crontab (1) 매뉴얼 페이지를 참조하십시오.

관련 문제