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ファイルを実行すると正常に動作します
BashファイルへのPATHを含むこの問題を解決しました
#!/bin/bash
cd /myfolder/crawlers/
PATH=$PATH:/usr/local/bin
export PATH
scrapy crawl my_spider_name
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
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
ログファイルの位置(ログを記録したい場合)
もう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時に実行されます。これは管理が簡単だと思いました。実行する他のバイナリがある場合は、それらの場所をパスに追加する必要がある場合があります。
「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分ごとに実行されます。
私の場合、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に出力とエラーを保存するために使用します
ありがとうございました。
シェルスクリプトには実行権限がありますか?
例えばできますか
/myfolder/crawlers/getdata.sh
shなしで?
可能であれば、cronの行にshをドロップできます