2011-09-10 18 views
4

を開始しません。cronジョブは、私は5分ごとに実行するcronジョブを持って

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /scr_temp/scheduleSpider.sh 

/var/spool/cron/crontabs/root

ではcronがシェルスクリプトを実行する必要があります

#!/bin/sh 
if [ ! -f "sync.txt" ]; then 
    touch "sync.txt" 
    chmod 777 /scr_temp 
    curl someLink 
fi 

それはコマンドラインからはうまく動作しますが、cronではうまく動作しません。しかし、cron自体はstartetですが、スクリプトは起動しません。

私はパスの問題について読んだが、実際には理解していない。私はいくつかのenvデータをファイルに書き込むcronをセットアップしました。これが出力されます。

HOME=/root 
LOGNAME=root 
PATH=/usr/bin:/bin 
SHELL=/bin/sh 

私は、コマンドラインでenvコマンドを実行すると、私はPATH

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

私はシェルスクリプトに設定することは何のパスを持っていないため、出力を次のですか?

+1

'sync.txt'を削除しない限り、実際にはこれは一度だけ実行されるように見えます –

+0

これはスーパーユーザーではなく、ここにはありません –

+0

プログラムの実行についてです –

答えて

3

$PATHは問題ありません。ほっといて。 Ubuntuでは、呼び出すすべてのコマンド(touchchmodcurl)は/binおよび/または/usr/binになります。

どのようにしてcronジョブをセットアップしましたか? crontab some-fileをrootとして実行しましたか?

/etc/crontabは、rootとしてcronコマンドを実行するための通常のメカニズムです。私のUbuntuシステムでは、sudo crontab -lno crontab for rootと言っています。ルート以外のアカウントと同様に、crontabをrootとして実行することはOKですが、代わりに/etc/crontabを使用することを検討してください。 /etc/crontabの先頭のコメントで説明したように、それは普通のcrontabとは異なる構文を使用することに注意してください:

$ head -5 /etc/crontab 
# /etc/crontab: system-wide crontab 
# Unlike any other crontab you don't have to run the `crontab' 
# command to install the new version when you edit this file 
# and files in /etc/cron.d. These files also have username fields, 
# that none of the other crontabs do. 

実行sudo crontab -l。それはあなたの命令を示していますか?

スクリプトを一時的に変更すると、常に可視出力が生成されます。

echo "Running scheduleSpider.sh at \`date\`" >> /tmp/scheduleSpider.sh.log 

をし、数分後に/tmp/scheduleSpider.sh.logに何を参照してください。たとえば、#!/bin/sh後に以下の権利を追加します。 (毎分実行するようにコマンドを設定できるので、結果が出るまで待つ必要はありません)。それがうまくいく場合は、echoコマンドをスクリプトに追加して、それが何をしているのかを詳しく見ることができます。

スクリプトは1回だけ実行されるようになっているようです。再度実行されないようにsync.txtファイルを作成します。それはあなたの問題の根本(エーム)かもしれません。それはあなたの意図ですか?コマンドを実行した後にsync.txtを削除し、それを行うのを忘れたということを意味しましたか?

rootさんのUbuntuのホームディレクトリは/rootです。スクリプトが初めて実行されるときは、/root/sync.txtを作成する必要があります。そのファイルは存在しますか?もしそうなら、何歳ですか?

curl someLinksomeLinkが有効なURLであることが前提)は、指定されたリンクのコンテンツを標準出力にダンプすることに注意してください。あなたの意図は、(それがrootに電子メールとして表示されます?それとも、ちょうど私達にコマンド全体を示さなかったということでした?

あなたのスクリプトの絶対パスの前に/ binに/ SHを追加する必要があります
+0

私はスクリプトの一番上にエコーを置くと出力があるので、これはうまくいくようですが、タッチとカールはうまくいかないのですか? –

+0

私が提案した他のことを試してみてください。 'echo'の出力を電子メールで受け取った場合、出力を '/ tmp'のファイルにリダイレクトするようにアドバイスを無視しました。あなたのcronの仕事は、あなたが私たちに示したように、一度だけ実行するように設計されています。 'touch'と' curl'はうまくいくはずです。あなたはそれらを呼び出すだけではありません。 –

+0

sync.txtが存在するかどうかを確認します。これは現在ではないので、ifブロックのコードを実行する必要があります。syncを作成する必要がありますが、実行する必要があるcurlコマンドはスパイダーを開始します。別のスパイダーが起動できることを確認するには、一度に1つのスパイダーしかアクティブにならないようにするため、コマンドラインからうまく動作します。私はあなたのエコーコマンドを試みますが、それは有効ではないようですが、どこかに行方不明がありますか? –

2

まず:あなたは*/5(男性5のcrontabを参照してください)第 で最初のフィールドを置き換えることができます:あなたのcrontabに[email protected]を入力することにより、cronのメールにあなたのメールアドレスへの出力を持っています。スクリプトに出力があれば、それが郵送されます。その代わりに、あなたはcron出力(通常は$ MAIL)を見つけることができるローカルのメールボックスを持っているかもしれません。

1

あなたのCRONのためのより良い構文は、あなたのscheduleSpider.shファイルの権限を確認し、また、

*/5 * * * * /scr_temp/scheduleSpider.sh 

です。 Cronは、プログラムを対話的に実行する可能性のあるユーザーとは異なるユーザーの下で実行されるため、cronに権限がない可能性があります。確認するには今すぐchmod 777を試してください。

+0

これを行ってもまだ問題があります –

+0

@Codemwnci:いいえ、cronジョブは 'crontab'コマンドを実行したユーザーと同じアカウントで実行されます。 cronデーモン自体はrootとして実行されますが、コマンドを呼び出すときに適切なユーザーアカウントに切り替わります。確かに –

+0

。私は、コマンドラインでコマンドを実行するユーザーとは異なるユーザーによってcrontabが作成される企業環境に慣れています。しかし、もう一度質問を読んで、私はあなたが正しいと思うし、ユーザーはおそらく同じです。 – Codemwnci

0

crontab -eでコマンドを追加しましたか、またはcrontabファイルを編集しましたか?正しく更新するには、crontab -eを使用してください。

1

私がお勧め:/scr_temp/scheduleSpider.shは実行ビット

  • /bin/touch代わりのtouch)スクリプト内で適切にPATHを設定したり、コマンドに絶対パスを使用したこと

    • チェックがsync.txtファイルへの絶対パスを指定します(またはスクリプトに対して相対的に計算する)
  • +0

    シェルスクリプトにはどのようなPATHを設定する必要がありますか? –

    +0

    @ArtWorkAD: '$ PATH'を明示的に設定する必要はありません。 cronジョブのデフォルトの '$ PATH'には、' touch'コマンドが入っているディレクトリ( '/ bin'、'/usr/bin'、あるいはその両方)が含まれているはずです。 –

    +0

    あなたはこれを回答として投稿し、それを少し説明できますか?私はちょうど私が変更しなければならないものを得ていませんでした... –

    -1

    作業を設定するcronスクリプト内のディレクトリであれば、おそらくどこにあるかを実行しないでしょう。

    0

    */5 * * * * /bin/sh /scr_temp/scheduleSpider.sh 
    
    関連する問題