Bash
Bash 腳本不能用作 cronjob
我試圖讓這個簡單的 bash 腳本在 cronjob 中工作。它用於使用 GoAccess 生成靜態 nginx 網路伺服器統計頁面。
我嘗試了我所知道的一切來解決這個問題,它只是不能作為 cronjob 工作。它在控制台中完美執行。當我刪除對 goaccess 的呼叫時,它甚至可以作為 cronjob 工作(例如,在此處放置一個 echo 以查看呼叫是否正確建構)。
對此有什麼幫助嗎?該腳本針對每個文件執行,但生成的文件僅包含來自 goaccess 的“如何使用”說明,當您在不帶參數的情況下呼叫它時會出現這些說明。
System 是一個執行 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)
這應該這樣做。只要確保你有正確的路徑。順便說一句,GoAccess很漂亮。
#!/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"
什麼是訪問?它不是標準命令,也不是您已經定義的函式,您需要在開頭聲明它或獲取具有該函式的文件