ログ管理サーバーからログをエクスポートし、これらのエクスポートをアーカイブサーバーに送信するスクリプトがあります。
このスクリプトを手動で実行すると、問題なく操作が完了します。エクスポートをダウンロードし、ファイルを別のサーバーに送信します。問題は、このワークフローを自動化するためにcronjobを作成すると、ログ管理サーバーからファイルをダウンロードするだけで、ファイルをマイアーカイブサーバーに送信できないことです。
スクリプトは次のとおりです。
#!/bin/bash
/opt/splunk/bin/splunk search "(sourcetype=*) earliest=-15m" -output rawdata -maxout 0 > /opt/access_archive/archive_ALL_EXPORTS.dmp
cdate=$(date +"%Y%m%d_%H%M%S")
shopt -s extglob
exported_file=archive_ALL_EXPORTS.dmp
mv "$exported_file" "${cdate}_$exported_file"
scp ${cdate}_$exported_file root@<IP_ADDRESS>:/root
スクリプトが示すように、archive_ALL_EXPORTS.dmpというdmpファイルをダウンロードし、ファイル名に正しい日付/時刻プレフィックスを追加しました。 scpを使用してこのファイルを送信しようとすると、何もしません。
クローンタブは次のとおりです。
* * * * * /usr/bin/bash /opt/access_archive/export.sh
私も次のことを試しました。
* * * * * /opt/access_archive/export.sh
また、cronはbin / bashを使用します:(/ etc / crontab)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
編集する:
また、エスケープ文字でエラーが発生した場合に備えて、このスクリプトを試してみましたが、結果は同じです。
#!/bin/bash
/opt/splunk/bin/splunk search "(sourcetype=*) earliest=-15m" -output rawdata -maxout 0 > /opt/access_archive/archive_ALL_EXPORTS.dmp
scp archive_ALL_EXPORTS.dmp root@<IP_ADDRESS>:/root
答え1
エスケープ文字などは必要ありません。次のコマンドのようにファイルのフルパスを提供することを忘れました。その後は効果がありました。
mv "/opt/access_archive/$exported_file" "/opt/access_archive/${cdate}_$exported_file"