저는 AWS와 Linux를 처음 사용합니다. 방금 첫 번째 AWS EC2 인스턴스(Amazon Linux 2 AMI(HVM))를 설정하고, scp를 사용하여 간단한 Python 프로젝트를 인스턴스로 전송하고, ssh를 사용하여 인스턴스에 연결하고, Python3, pip, Pipenv 및 프로젝트 종속성을 설치한 다음 프로젝트를 실행합니다. 모든 것이 예상대로 작동합니다. 그런 다음 프로젝트에 crontab을 추가했습니다.
*/5 * * * * cd my_project && pipenv run python3 test.py
잠시 후 명령줄에 메시지가 표시됩니다.
You have new mail in /var/spool/mail/ec2-user
메시지는 다음과 같습니다.
/bin/sh: pipenv: command not found
다른 게시물에서: ...cron doesn't have the same environment ie $PATH as the user entering the cron script data
.이게 무엇을 의미하는지, 이 상황을 어떻게 해결해야 하는지 잘 모르겠습니다. Pipelinev를 추가할 수 있는지 확인하기 위해 /bin/sh 파일을 살펴보았지만 내용이 엉망이고 사람이 읽을 수 없습니다.
이전에 which pipenv
Pipenv가 설치된 위치를 확인했고 내가 얻은 경로는 입니다 ~/.local/bin/pipenv
. 해당 디렉토리로 CD를 시도하면 다음과 같은 결과가 나타납니다 -bash: cd: /home/ec2-user/.local/bin/pipenv: Not a directory
. I cd /bin
및 의 경우 ls
Python3 및 pip는 설치되어 있지만 Pipenv는 설치되지 않은 것을 볼 수 있습니다. Python3과 pip는 yum을 사용하여 설치했지만, 파이프라인v는 pip를 사용하여 설치했다는 점을 언급할 가치가 있을 것입니다.
다소 완전한 Linux 초보자의 경우 여기서 무슨 일이 일어나고 있는지에 대한 통찰력을 얻으면 크게 감사하겠습니다.
편집: 게시한 직후에 이 사실을 발견했습니다...
cron runs your command in a restricted environment.
What environment variables are available is likely to be very limited. Typically, you'll only get a few variables defined, such as $LOGNAME, $HOME, and $PATH.
Of particular note is the PATH is restricted to /bin:/usr/bin. The vast majority of "my cron script doesn't work" problems are caused by this restrictive path. If your command is in a different location you can solve this in a couple of ways:
Provide the full path to your command.
1 2 * * * /path/to/your/command
Provide a suitable PATH in the crontab file
PATH=/bin:/usr/bin:/path/to/something/else
1 2 * * * command
Pipenv를 설치하거나 cron에게 Pipenv를 찾을 수 있는 위치를 알려주어야 할 것 같습니다 /usr/bin
. 언급한 대로 Pipenv에 대한 경로를 알고 있지만 전자를 수행하는 방법을 전혀 모릅니다. 그러나 거기에 가려고 하면 존재하지 않는다는 메시지가 표시되므로 후자를 수행하는 방법을 모르겠습니다. 어느 하나.
답변1
디렉터리 대신 파일로 이동 directory not found
하려고 하기 때문에 오류가 발생합니다 . 이것 대신에 이것을 사용 하고 다음을 사용하십시오: 그러면 당신은 그것을 보게 될 것입니다.cd
cd /home/ec2-user/.local/bin/pipenv
cd /home/ec2-user/.local/bin/
ls -l
ls -l /home/ec2-user/.local/bin/pipenv
crontab에서 다음 옵션 중 하나를 사용하십시오.
*/5 * * * * cd my_project && /home/ec2-user/.local/bin/pipenv run /usr/bin/python3 test.py
-------------------------------------
PATH=/usr/bin:/home/ec2-user/.local/bin
*/5 * * * * cd my_project && pipenv run python3 test.py
마지막 줄 뒤에 새 줄이 있는지 확인하세요.