로그 관리 서버에서 로그를 내보내고 이러한 내보내기를 보관 서버로 보내는 스크립트가 있습니다.
이 스크립트를 수동으로 실행하면 문제 없이 작업이 완료됩니다. 내보내기를 다운로드하고 파일을 다른 서버로 보냅니다. 문제는 이 워크플로를 자동화하기 위해 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"