2012-01-11 27 views
0

したがって、毎時、ifconfigの出力をテキストファイルにパイプするbashスクリプトがあります。多くの人が遭遇したように、このスクリプトはcronで使用すると正しく機能しません。しかし、私が見てきたこれに対する修正のほとんどは、私の場合には当てはまりません。私はすべてのパスを明示的に指定しており、スクリプトには実行権限があり、cronファイルの最後に改行があります。BashスクリプトがCronで正しく実行されない

は創造十分に、私のスクリップ、ip.shは、含まれています

ifconfig > /home/drake/Dropbox/maintenance_scripts/ip.txt 

のcronエントリは次のとおりです。

0 * * * * /home/drake/Dropbox/maintenance_scripts/ip.sh 

(私はそれがデバッグのために毎分を実行している)

ここで大きな問題は、それが実行され、実行され、それは可能性がありますコンテンツのip.txtをクリアすることです。また、私は稼働時間と同じ正確なことを行う別のスクリプトを持っていますが、それは単なる混乱しているすべての問題なしで動作します。私も>>を試してみましたが、同じ結果が得られたようです。

だから、誰かが1つのスクリプトが期待どおりに機能するのか、他の人がちょうどこのようになるのでしょうか?

これは私のUbuntuサーバーで実行されています。私はDropboxを使ってテキストファイルを同期させています

答えて

3

ip.shスクリプトは実行するたびにip.txtファイルを圧縮することになっています。プログラムを再投入するのはifconfigまでです。だから、あなたの問題は、ifconfigはそうしていないということです。

cronから実行するときの通常の問題は、環境です。 cronコマンドを実行すると、プロファイルは使用されないことに注意してください。

この場合、cronのPATH設定に、ifconfigが存在するディレクトリが含まれていない(つまり、/sbinはPATHにありません)ということは間違いありません。明白な回避策:

  • /sbin/ifconfig ...
  • export PATH=$PATH:/sbin; ifconfig ...

私は単にcrontabファイルからスクリプトを実行すると、通常のビジネスを行うための最善の方法だと思います。 crontabの設定を変更せずに、デバッグコードを追加したり、環境設定を変更したり、心の中身を変えることができます。 crontabファイルの複雑なコマンドラインでの試合は、遅かれ早かれ、一部のシステムなどで問題に遭う可能性があります。だからあなたのシステムは分かりやすいと思う - 私は自分自身のcron -runスクリプトでやや複雑なシステムを使っているが、多くの共通性がある。要点は、crontabエントリは単純であり、実行されるスクリプトは複雑さが隠されているところです。

3

あなたのスクリプトは、先頭に「シェバング」ラインを持っている必要があります。

#!/bin/sh 

それは絶対的に必須ではありませんけれども。

あなたが教えてくれたので、スクリプトはip.txtを上書きします。これは、リダイレクション演算子が実行するものです(>)。ファイルの末尾に追加する場合は、>>を使用してください。 (あなたはそれと同じ結果を試したと言っていましたが、これは真実ではないと私は思うのですが、クローンの仕事は何も出力されていないと思われますので、ファイルに何も追加しません)。

しかし、リダイレクトを行うだけの別のスクリプト。あなたはcronジョブ自体に>または>>を使用することができます。

0 * * * * ifconfig >> /home/drake/Dropbox/maintenance_scripts/ip.txt 

と、少なくとも私のシステム上で、cronジョブのデフォルト$PATH/usr/bin:/binですが、ifconfig/sbin/ifconfigです。 which ifconfigまたはtype ifconfigを試して、ifconfigがシステムにインストールされている場所を確認してください(私たちはどちらもUbuntuを使用しているので、おそらく同じです)、cronジョブのフルパスを使用します。例えば:

0 * * * * /sbin/ifconfig >> /home/drake/Dropbox/maintenance_scripts/ip.txt 

そして、あなたは出力が変更されたとき(私はそれはあなたがチェックしているものだと推定)を見たい場合は、それがタイムスタンプを追加するのは簡単です:

0 * * * * (date ; /sbin/ifconfig) >> /home/drake/Dropbox/maintenance_scripts/ip.txt 
+0

ああ、私はそれがこのようなものでなければならないことを知っていました。それは実際には/ sbin /にあり、/ sbin/ifconfigに変更すると正しく設定されます。 – Drake

+1

その横のチェックマークアイコンをクリックすると、正しい回答として回答を受け入れることができます。一度あなたは15の評判ポイント(それは時間がかかるはずはありません)を持っているなら、そうすることができれば、1つまたは複数の回答をupvoteすることもできます。 –

3

てみてくださいこれは、私のためにクロンから働いた。 ifconfigの出力はLinuxディストリビューションからディストリビューションに変更できるので、awkの選択を調整する必要があるかもしれません。

# Cron ifconfig piping is broken 
eth0ipIC=`/sbin/ifconfig eth0` 
eth0ip=`echo $eth0ipIC|awk '{print $7}'|awk -F: '{print $2}'` 
関連する問題