将 crontab 作业安排在本月最后一个周日[已关闭]

问题描述 投票:0回答:1

我们希望扩展我们的备份系统以包括月末备份。它将在该月的最后一个星期日执行,但下面的代码是为了让我可以看到它今天在较小的规模上运行。

开始于(有效)

0 12 * * 0 sudo tar -cpzf /media/BackupDisk/wwwJUNEbackup.tar.gz /var/www

在互联网上搜索并提出了这段代码,并在脚本文件中进行了测试

 if [ $(date +%d -d '+7 days') -le '8' ] ; then
    echo "Yes"
else
    echo "No"
fi

(仅供参考 - 如果今天的日期 + 7 天小于或等于 8,则为“是”,否则为“否”)

但是当我尝试包含到 Sudo 的 crontrab 中时

26 17 * 6 5 [ $(date +%d -d '+7 days') -lt '8' ] && sudo tar -cpzf /media/BackupDisk/wwwJUNEbackup.tar.gz /var/www

我什么也没得到。

我做错了什么?

linux ubuntu cron backup
1个回答
1
投票

您使用的语法远远超出了基本 shell => 恕我直言,最好将其放入具有特定 shell 的脚本中,通过

#!/...
强制执行。

创建一个简单的脚本

last_weekday_in_month.sh
:

#!/bin/bash
# Add one week to the current date and get its day-of-month
dom_a_week_from_today=`date +%d -d '+1 week'`
# trim any leading zero
dom_a_week_from_today=${dom_a_week_from_today#0}
# if next week is also next month, today's the last of this weekday for the month
[[ $dom_a_week_from_today -le 7 ]]

在您的 crontab 条目中使用它。

0 12 * * 0 /path/last_weekday_in_month.sh && sudo tar -cpzf /media/BackupDisk/wwwJUNEbackup.tar.gz /var/www
© www.soinside.com 2019 - 2024. All rights reserved.