Crontab がエラーで実行されています

Crontab がエラーで実行されています

私は、crontab を使用してプログラム的にサーバー上でいくつかの scrapy スパイダーを実行しようとしています。いくつかのコマンドを試しましたが、最終的にこの crontab は実行されておらず、役立つエラーも表示されません。

#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours

この crontab は動作せず、syslog次のようなメッセージが表示されます:

Feb 13 09:47:01 d4bd CRON[18641]: (root) CMD (cd Travel/lastsecond && scrapy crawl tours)
Feb 13 09:47:01 d4bd CRON[18640]: (CRON) info (No MTA installed, discarding output)

出力は次のようになります:

/bin/sh: 1: scrapy: not found

scrapy をインストールしましたが、コマンドはスタンドアロンで正常に動作しています。

答え1

cron はデフォルトで、実行したコマンドの出力をユーザーにメールで送信します。ただし、MAT (メール転送エージェント) がインストールされていないため、cron はメールを送信できず、コマンドの出力を破棄します。cron 行を次のように変更することで、出力をファイルまたは空白 (/dev/null) にリダイレクトできます。

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1

または

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1

2 番目の可能性は、MTA (sendmail、postfix など) をインストールし、ローカル メールを処理するように構成することです。

または、スクリプトが出力を生成しないようにすることもできます。

答え2

ファイルscrapyはどこにも見つかりませんPATH(下記参照)。ファイルの場所を見つけるには、対話型シェルで次のコマンドを使用します。

which scrapy

絶対パスが表示されます/usr/local/bin/scrapy。例: crontab への絶対パスを入力します。

47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours

PATH変数に関して

PATH変数は、コマンド ラインまたはスクリプトで正確なパスを指定しない場合にプログラムを検索するために使用されます。これは、プロファイル設定と crontab によっても定義されます。通常は次のようになります。

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

この例は私の からのものです/etc/crontab。ただし、crontab で指定した値は異常のようです…

PATH=/root/

設定しようとしていませんか?作業ディレクトリここ?!

シェバンについて

シェバン多くのスクリプトの最初の行です。どのインタープリタがファイルを解釈するかを指定します。crontabでは意味がないので削除してください。crontabはデータスクリプトではなく、Cron 用のファイルです。

関連情報