AWS EC2 crontabがパッケージを見つけるのを助ける方法は?

AWS EC2 crontabがパッケージを見つけるのを助ける方法は?

私は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 pipenvPipenvがインストールされている場所を確認し、私が得たパスはです~/.local/bin/pipenv。そのディレクトリでCDを試すと、次の結果が表示されます-bash: cd: /home/ec2-user/.local/bin/pipenv: Not a directory。 Icd /binlsPython3と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しようとするとエラーが発生します。これの代わりにこれを使用し、次を使用してください:それからあなたはそれを見るでしょう。cdcd /home/ec2-user/.local/bin/pipenvcd /home/ec2-user/.local/bin/ls -lls -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

最後の行の後に新しい行があることを確認してください。

関連情報