2017-09-24 2 views
0

Linuxのcrontabでクローラを実行しようとしています。crontabがエラーを返す

これは、ここで

pyenv shell jake-crawler 

でPython環境に行くべきである私のcrontab -e

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

これは10分ごとに実行されます。私は、Pythonの環境を変更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設定filrで定義します。

この回答を参照してください。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)のマニュアルページを参照してください。