Linux
腳本手動工作但不在 cron 中 - 不計算 var?
我正在為學校作業製作 GFFS 備份腳本,但遇到了一些問題。它是這樣工作的:
/etc/backup/backup.sh PERIOD NUMBER
我在 cron 中添加了以下幾行:
# m h dom mon dow command # Backup for fileserver: #daily: 5 times/week 0 23 * * 1-5 /etc/backup/backup.sh daily $(date -d "-1 day" +%w) #weekly: 5 times/month 10 23 * * 7 /etc/backup/backup.sh weekly $((($(date +%-d)-1)/7+1)) #monthly: 12 times/year 20 23 1 * * /etc/backup/backup.sh monthly $(date -d "-1 day" +%m) #yearly: each year 0 3 1 1 * /etc/backup/backup.sh yearly $(date -d "-1 day" +%Y)
最後的計算是知道要覆蓋以前的備份。這在手動觸發時非常有效,但是當由 cron 觸發時,它會做一些奇怪的事情。我說的是每周備份條目。計算應該給我當月的周數。我做了 ‘grep CRON /var/log/syslog’ 並找到了這一行:
Dec 19 14:33:01 BE-SV-04 CRON[5445]: (root) CMD (/etc/backup/backup.sh weekly $((($(date +)
看起來好像 cron 沒有正確執行計算。有什麼幫助嗎?
我認為你必須逃避“%” - 標誌
所以這:
0 23 * * 1-5 /etc/backup/backup.sh daily $(date -d "-1 day" +\%w)
… 應該管用。不知道哪個要轉義,它認為+和%,請試一試。當我在 cron 中執行此操作時,我使用了更醜陋的反引號語法來執行命令,並且也不得不將它們轉義,例如:
0 1 * * * something >> bla\`date \+\%Y_\%m_\%d\`.log
我不確定 cronjob 在哪個 shell 中執行,但它似乎無法解析計算;您可能需要使用bc。