子 (/spawned と呼ばれる) スクリプトの Bash リダイレクト

子 (/spawned と呼ばれる) スクリプトの Bash リダイレクト

APC UPSのイベントに応答するためにapcupsdを使用しています。デーモンはBASHスクリプトをリンクして応答に影響を与えます。まず、apccontrol(4つの追加パラメータを含む)を呼び出し、次に「onbattery」などのイベント固有のスクリプトを呼び出します。ユーザーはこれらの3番目のレベルのスクリプトのみを編集できます。

電子メールとブロードキャスト用のモジュール式メッセージを作成するために "onbattery"スクリプトを編集しました。ただし、チェーンが最上位デーモンから始まると、すべてのコマンド(cat、echo、およびリダイレクト/追加)が最後の「onbattery」スクリプトで無視されるようです。

生成されたシェル/スクリプトのリダイレクトが問題であることを読んだ後は理解しますが、問題を解決する方法はありません。誰でも助けることができますか?

onbatteryスクリプトは次のとおりです

#!/bin/bash
echo -e "From: Admin@somewhere \nSubject: Server on battery $(date +%D_%T) \n\n" > email.txt
cat OnBattWarn.txt >> email.txt
cat email.txt | ssmtp remoteadmin@somewherelse
wall | email.txt
exit99

ベストアンサー1

ご配慮ありがとうございます。良い睡眠がその答えを明らかにしました。スクリプトはrootでうまく実行されますが、apcupsdでは失敗します。これは権限の問題(Jeffが提案したように)を指していますが、実際には、apcupsdが元の/ apcupsdディレクトリではなく/にemail.txtファイルを生成することです。このファイルがないと、リダイレクト、追加などが失敗します。簡単な解決策は絶対パスを使用することです。バカみたいですね!このスクリプトのバージョンを他の場所で正常に使用しなかった場合は、すぐに答えを見つけることができたので、私の分析は間違っているはずです。

set -xを使ってデバッグしようとしましたが、もちろんbash自体は失敗しないので、エラーもなく結果もありません。とにかく、すべてが解決されました。お時間をいただきありがとうございます。

おすすめ記事