2017-01-27 2 views
1

私はdryscrapeをpythonスクリプトで使用しています。 pythonスクリプトは、cronによって実行されるbashスクリプトで呼び出されます。気づかないかもしれない人のために、dryscrapeはヘッドレスブラウザです(バックグラウンドでQtWebkitを使用するので、xsessionが必要です)。ここでCronジョブは、コンソールから完全にうまく動作するbashスクリプト(xsessionが必要なシェルのpythonスクリプト)を実行できません。

それは、私は、コマンドラインからPythonスクリプトを実行すると、私はコマンドラインからbashスクリプトを実行すると、それは

  • を作品

    1. を抱えている問題についての主なポイントですあまりにも動作します

    私は、これは私のコマンドプロンプトとcronジョブが実行されている間の異なる環境とは何かを持っていることを考え出したので、私は次のように私の.profileを調達するために私のbashスクリプトを修正:

    #/bin/bash 
    
    . /full/path/to/my/home/directory/.profile 
    
    python script_to_run.py 
    

    これは私のcronジョブのcrontabエントリは次のようになります。ちなみに

    0,55 14-22 * * 1-5 /path/to/script.sh >> $(date "+/path/to/logs/\%Y\%m\%d.mydownload.log") 
    

    、私は仕事が実行されて(私はでは/ var/log/syslogのエントリを参照してくださいすることができていることを知っていますスクリプトは、ログファイルへの書き込み - 私は以下のエラーメッセージを取得する場所である):

    Xサーバに接続できませんでした:

    すべての場合において、私は、次のエラーメッセージが得ました。私は( - それは、コマンドラインで実行されるため、明らかに)私のマシン上での前提条件を、インストールされているセッション

    を作成する前にdryscrape.start_xvfb() を呼び出してみてください。現時点では、アイディアが足りなくなっています。

    スクリプトがコンソールでうまく動作し、cronで実行すると何が失敗するのでしょうか?

    [[関連する詳細]]

    • OS:Linuxの16.0.4 LTS
    • のbash:バージョン4.3.46(1)
    • のcronユーザー:自分自身(のすなわち同じユーザコマンドプロンプト)
    • dryscrape:バージョン1.0.1
  • +0

    cronjobは 'DISPLAY'変数を設定していますか(または' .profile'でこれを行いますか)? –

    +0

    いいえ、私はそうは思わない。詳しく教えてください...それは私が似たようなプロジェクトで以前に持っていた問題と同じように聞こえる。コマンドを実行する前に、crontabエントリに 'export DISPLAY =:0'を追加する必要がありますか? –

    +0

    Xウィンドウセッションに含まれていない端末から実行できますか? (ctrl + alt + 1、ctrl + alt + 6またはctrl + alt + 7を押してxwindowsに戻ります)。ドライスクレイプにはxsessionが必要かもしれません)。 – ymmyk

    答えて

    0

    これに対する解決策は、乾式スクラップセッションを開始する前にdryscrape.start_xvfb()メソッドを呼び出すことでした。

    0

    のCronユーザーがディスプレイを持っていないので、あなたは、任意の通信を実行することはできませんディスプレイを必要とする。 pythonスクリプトを修正して、どのタイプの表示も使わないようにする必要があります(いくつかのpythonコマンドは、表示を開かなくても内部的にこの変数をチェックするので注意してください)。 テストする最善の方法は、Displayなしでマシンにsshをインストールし、そこからエラーなしで実行できるかどうかを確認することです。

    +0

    上記のコメントを参照してください。状況をさらに明確にするのに役立つかもしれません。 –

    関連する問題