Linux

腳本手動工作但不在 cron 中 - 不計算 var?

  • December 19, 2016

我正在為學校作業製作 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

引用自:https://unix.stackexchange.com/questions/331410