一連のExpectスクリプトを実行したい。実行のチェーンは次のようになります。Cronジョブはbashスクリプトを開始し、このラッパーは〜11個のbashスクリプトを開始Parallel
します-それぞれがスクリプトを呼び出しExpect
ます。
そのExpect
部分まではすべて順調です。2番目のBashスクリプトにParallel部分があり、各期待スクリプトのホスト名をファイルに出力しています。実際、doはグループで表示されますが、Expectスクリプトはすぐに終了します。
Cronジョブの性質上、環境変数をジョブに渡す必要があると聞きました。私はこれまでこれを試しました:
48 9 * * * rm /home/admin/.flag && /home/admin/.profile; /home/admin/nodeTest.sh
nodeTestの重要なコードは次のとおりです。
for i in {1..10}; do
for chunk in `ls /home/admin/assets/sagLogs/x*`; do
cat $chunk | parallel -j 11 -I% --max-args 1 /home/abdmin/oneNode.sh "%"
clear
done
done
チャンクの長さは11ホスト名です。それらはoneNodeを介してExpectスクリプトを開始するために並列プログラムに入ります-oneNodeはホスト名をIPに変換し、実行するスクリプトを決定します。
これはコマンドラインからうまく機能します。悲しみを与えてくれるだけのCronの仕事。interact
tclコマンドが問題を引き起こすことを読みましたが、スクリプトでは使用していません。これは並行して実行される行です:
timeout 80 sudo expect /home/admin/assets/activeTest $sag $ip &
更新:前の行を次のように変更しました:
timeout 80 sudo /usr/bin/expect /home/admin/assets/activeTest $sag $ip &
更新:Expectスクリプトからエラーを検査した後、私が実行しているのは、インポートされたenv変数の不足です。最初のエラーは、TERM
変数が==不明であるために発生します。
'unknown': I need something more specific.
while executing
"exec /usr/bin/clear"
invoked from within
"puts [exec /usr/bin/clear]"
(file "/home/admin/assets/activeTest" line 35)
呼び出し元のスクリプト(oneNode)からenvをダンプすると、termが設定されていることがわかります。
TEMR=vt100
そのため、ラッパーに設定されますが、expectスクリプトに継承されることはありません。何をすべきか?