我运行了几个 cron 作业来备份数据库:
0 8 * * * BACKUP=DEV DB=01 /usr/local/bin/backup.sh > /var/log/backup-db01-`date "+\%m\%d\%y"`.log 2>&1||/usr/local/bin/create-ticket.sh
0 16 * * * BACKUP=DEV DB=02 /usr/local/bin/backup.sh > /var/log/backup-db02-`date "+\%m\%d\%y"`.log 2>&1||/usr/local/bin/create-ticket.sh
在脚本中,我尝试在失败时创建 JIRA 票证并附加备份日志:
创建ticket.sh脚本:
#create Ticket for failed backup#
JIRA=`/opt/atlassian-cli/jira.sh --server https://blahblah --user admin --password blahblah --action createIssue --project "DEV" --type "Incident" --summary "Failed backup on $BACKUP $DB" --components "blah" --priority "Major"| awk '{print $2}'`
###Atttach logs:###
/opt/atlassian-cli/jira.sh --server https://blahblah --user admin --password blahblah --action addAttachment --issue "${JIRA}" --file "?????"
我需要知道如何在每次 cron 运行到 { --file "???"
} 部分时传递不同的文件名...文件名每天都会变化,我需要脚本每天为每个数据库选取新创建的文件失败。
答案1
制作一个包装脚本来清理你的 crontab;
0 8 * * * /usr/local/bin/backupOrTicket.sh 01
把这个放进去;
DB=$1
BACKUP=DEV
FILE="/var/log/backup-$DB-$(date +%m%d%y).log"
/usr/local/bin/backup.sh > "$FILE" 2>&1 \
|| /usr/local/bin/create-ticket.sh "$FILE"
--file "$1"
在 create-ticket.sh 中使用。如果实际未使用 BACKUP 变量,您可能需要将其删除。您还应该使用date --iso-8601=s
以便您的日志文件正确排序。 (使用除数字最大到最小以外的任何日期格式都是反模式)
答案2
我认为您可以引入日志文件名参数用于重定向和调用 create-ticket.sh 时
0 8 * * * BACKUP=DEV DB=01 LOG=/var/log/backup-db01-$(date "+%m%d%y").log /usr/local/bin/backup.sh > $LOG 2>&1 || /usr/local/bin/create-ticket.sh $LOG
所以 create-ticked.sh 应该期望该参数,并且您可以在内部使用它,例如
... --file "$1" ...
您可能不想使用转义 % 符号 - $(date "+%m%d%y") - 部分会产生像 021318 这样的字符串一次,所以您保证坚持使用相同的名称。