저는 이 간단한 bash 스크립트를 cronjob에서 작동시키려고 합니다. GoAccess를 사용하여 정적 nginx 웹 서버 통계 페이지를 생성하는 데 사용됩니다.
이 문제를 해결하기 위해 제가 아는 모든 것을 시도했지만 cronjob으로 작동하지 않습니다. 콘솔에서 완벽하게 실행됩니다. goaccess에 대한 호출을 제거하면 cronjob으로도 작동합니다(예를 들어 호출이 올바르게 빌드되었는지 확인하기 위해 거기에 에코를 추가함).
이것에 대한 도움이 있나요? 스크립트는 각 파일에 대해 실행되지만 결과 파일에는 인수 없이 호출할 때 나타나는 goaccess의 "방법" 지시문만 포함됩니다.
시스템은 Debian 6.0을 실행하는 가상 서버입니다. 저는 GoAccess 0.5와 nginx 1.2.1을 사용하고 있습니다.
스크립트는 다음과 같습니다.
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/
_logdir="/srv/www/logs"
_logfiles="${_logdir}/access_*.log"
for logfile in $_logfiles; do
_curfilename="${logfile##*/}"
# All these commands work flawless
#echo "$logfile" >> /home/debug.log
#echo "$_curfilename" >> /home/debug.log
#echo "goaccess -a -f $logfile > /srv/www/stats/${_curfilename}.html" >> /home/debug.log;
# This one fails
goaccess -a -f "${logfile}" > "/srv/www/stats/${_curfilename}.html";
done
다음은 시간별 crontab 라인입니다(디버깅을 위해 * * * *를 사용합니다).
0 * * * * /bin/bash /home/run_webstats_update.sh
cron.log의 오류 출력:
/USR/SBIN/CRON[26099]: (root) CMD (/bin/bash /home/update_webstats.sh)
/USR/SBIN/CRON[26098]: (CRON) error (grandchild #26099 failed with exit status 1)
답변1
이것은 트릭을 수행해야합니다. 올바른 경로가 있는지 확인하십시오. 그런데,방문하다매우 아름답습니다.
#!/bin/bash
PATH=$PATH:/home/
_logdir="/srv/www/logs"
_logfiles="${_logdir}/access_*.log"
for logfile in $_logfiles; do
_curfilename="${logfile##*/}"
cat "${logfile}" | goaccess -a > "/srv/www/stats/${_curfilename}.html"
done
압축된 데이터 파일을 구문 분석할 수도 있습니다.
zcat -f access.log* | goaccess -a > "/srv/www/stats/${_curfilename}.html"
답변2
고액세스란 무엇인가요? 표준 명령도 아니고 정의한 함수도 아니므로 처음에 선언하거나 해당 함수가 포함된 파일을 가져와야 합니다.