web-dev-qa-db-ja.com

cronジョブのScrapyクローラー

Cronジョブからスクレイプクローラーを実行したい。

スパイダーを使用してscrapyプロジェクトが配置されているbashファイルgetdata.shを作成します

#!/bin/bash
cd /myfolder/crawlers/
scrapy crawl my_spider_name

私のcrontabは次のようになります。5分ごとに実行したいです。

 */5 * * * * sh /myfolder/crawlers/getdata.sh 

しかし、それは機能しません、何が問題なのですか、私のエラーはどこにありますか?

ターミナルsh/myfolder/crawlers/getdata.shからbashファイルを実行すると正常に動作します

19
beka

BashファイルへのPATHを含むこの問題を解決しました

#!/bin/bash

cd /myfolder/crawlers/
PATH=$PATH:/usr/local/bin
export PATH
scrapy crawl my_spider_name
24
beka

crontab -eに次の行を追加すると、毎日午前5時にスクレイプクロールが実行されます。これはクロックスの答えのわずかに変更されたバージョンです

PATH=/usr/bin
* 5 * * * cd project_folder/project_name/ && scrapy crawl spider_name

$PATHを設定しないと、cronは「コマンドが見つかりません:scrapy」というエラーを表示します。これは、/ usr/binがプログラムを実行するスクリプトがUbuntuに保存されている場所だからだと思います。

私のscrapyプロジェクトの完全なパスは/home/user/project_folder/project_nameであることに注意してください。 cronでenvコマンドを実行したところ、作業ディレクトリが/home/userであることがわかりました。したがって、上記のcrontabで/home/userをスキップしました

Cronログはデバッグ中に役立ちます

grep CRON /var/log/syslog
8
NFern

pip3(または同様のもの)を使用してscrapyをインストールした人のために、簡単なインラインソリューションを次に示します。

*/10 * * * * cd ~/project/path && ~/.local/bin/scrapy crawl something >> ~/crawl.log 2>&1

交換:

*/10 * * * *cronパターンを使用

~/project/pathとスクレイププロジェクトへのパス(scrapy.cfgは)

somethingとスパイダー名(プロジェクトでscrapy listを使用して調べてください)

~/crawl.logログファイルの位置(ログを記録したい場合)

2
nottmey

もう1つのオプションは、シェルスクリプトの使用を忘れて、cronjobで2つのコマンドを直接チェーンすることです。 crontabリストの最初のscrapycronjobの前にPATH変数が設定されていることを確認してください。実行:

    crontab -e 

編集して見てみましょう。さまざまな時間に実行されるスクレイプクローラーがいくつかあります。 5分ごとのものもあれば、1日2回のものもあります。

    PATH=/usr/local/bin
    */5 * * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_1
    * 1,13 * * * user cd /myfolder/crawlers/ && scrapy crawl my_spider_name_2

PATH変数の後にあるすべてのジョブは、スクレイプになります。ここでは、最初の1つは5分ごとに実行され、2番目は1日2回午前1時と午後1時に実行されます。これは管理が簡単だと思いました。実行する他のバイナリがある場合は、それらの場所をパスに追加する必要がある場合があります。

2
croc

「whichscrapy」コマンドを使用して、scrapyがインストールされている場所を確認します。私の場合、scrapyは/usr/local/binにインストールされています。

crontab -eを使用して編集するためにcrontabを開きます。 PATH=$PATH:/usr/local/bin export PATH */5 * * * * cd /myfolder/path && scrapy crawl spider_name

動作するはずです。 Scrapyは5分ごとに実行されます。

1
simba

私の場合、scrapyは。local/bin/scrapyスクレーパーの適切なパスを指定し、worKperfectという名前を付けます。

0 0 * * * cd/home/user/scraper/Folder_of_scriper/&&/home/user/.local/bin/scrapyクロール「名前」>>/home/user/scrapy.log 2>&1

/ home/user/scrapy.logプログラムが機能するかどうかを確認するためにscrapy.logに出力とエラーを保存するために使用します

ありがとうございました。

0
Nikulsinh

シェルスクリプトには実行権限がありますか?

例えばできますか

  /myfolder/crawlers/getdata.sh 

shなしで?

可能であれば、cronの行にshをドロップできます

0