次のコマンドを使用してページスペース値を取得するには、使用されているページスペースの割合を確認する必要があります。これには以下のコードを使用しましたが、このスクリプトを実行すると関数に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でスクリプトを実行するにはいくつかの規則があります。
- すべてのコマンドに以下を使用します。$(任意のコマンド)crontabのパスの問題を回避するには、スクリプトから
- コマンドラインでスクリプトをテストする場合は、crontabと同じユーザーとして実行してください。
- crontabでフルパス名を設定する
- 次のようにスクリプトで正しいシェルを設定します。シェルボーン。
このヒントが機能しない場合:スクリプトからログファイルを生成し、すべての変数を記録して問題を分離します。