スクリプトは手動で動作しますが、cronでは動作しません。 varは計算されませんか? [コピー]

スクリプトは手動で動作しますが、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が計算を正しく実行していないようです。助けが必要ですか?

ベストアンサー1

「%」記号を避けるべきだと思います。

だからこれ:

0   23   *   *    1-5   /etc/backup/backup.sh daily $(date -d "-1 day" +\%w)

...作業する必要があります。どちらをエスケープすべきかわかりません。 +と%だと思います。試してみてください。 *cron でこの操作を実行するときは、次のように、より見苦しい逆引用符構文を使用してコマンドを実行し、コマンドもエスケープする必要があります。 *

0  1 * * * something >> bla\`date \+\%Y_\%m_\%d\`.log

おすすめ記事