cronジョブとして実行されたときにnull値を渡すシェルスクリプト[閉じる]

cronジョブとして実行されたときにnull値を渡すシェルスクリプト[閉じる]

次のコマンドを使用してページスペース値を取得するには、使用されているページスペースの割合を確認する必要があります。これには以下のコードを使用しましたが、このスクリプトを実行すると関数にnull値が渡されます。

MAX=`free -m | grep Swap | gawk '{ print $2 }'`
MIN=`free -m | grep Swap | gawk '{ print $3+300 }'`
DIV=`echo $MIN/$MAX*100|bc -l`
PAGESPACE=`print $(( round(DIV) ))`

PAGESPACE私の関数の1つにパラメータとして渡しています。

機能:

monPar 0 0 $PAGESPACE 80 90 db1adm "PAGE SPACE" now

このスクリプトを手動で実行すると、正しい値が提供されます。問題は、このスクリプトがcrontabで実行されたときに発生します。このスクリプトは関数にゼロ値を渡します。

答え1

cronジョブが正しく機能しない最初の問題は、cronジョブで明示的に設定するか、すべてのユーティリティに絶対パスを使用$PATHしてください
$PATH

2番目に可能性の高い問題は、シェルをチェックすることです。これはround(DIV)一般的なシェル算術演算子ではないため、cronが使用するシェルでは使用できない可能性があります。


また、をPAGESPACE=実行してこれを簡素化できますPAGESPACE=$(( round(DIV) ))。バックティックは必要ありません(シェルが通常の動作に従う場合は必要ありませんが、それがどのシェルかはわかりません)。

答え2

crontabでスクリプトを実行するにはいくつかの規則があります。

  1. すべてのコマンドに以下を使用します。$(任意のコマンド)crontabのパスの問題を回避するには、スクリプトから
  2. コマンドラインでスクリプトをテストする場合は、crontabと同じユーザーとして実行してください。
  3. crontabでフルパス名を設定する
  4. 次のようにスクリプトで正しいシェルを設定します。シェルボーン

このヒントが機能しない場合:スクリプトからログファイルを生成し、すべての変数を記録して問題を分離します。

関連情報