如何安排需要用户确认的不定期备份脚本

如何安排需要用户确认的不定期备份脚本

我有一个需要用户交互的备份脚本。我想安排它每周运行一次。

限制是:(1) 计算机启动时直接进入 Gnome 并每天关闭;(2) 用户必须能够选择不运行脚本并在屏幕上看到任何脚本输出。

我知道 Gnome Scheduler 用于anacron每周的 cron 任务,并且错过的任务会在启动时运行。但如果任务需要终端窗口进行用户确认,那么这毫无用处,因为脚本会在 Gnome 启动之前运行。

当然,Gnome 有启动应用程序,用于在启动时运行程序。但这没什么用,因为我不想每次启动时都运行我的脚本。

一个办法?

答案1

部分基于评论中的反馈,这是我提出的解决方案。

1.创建一个空的日志文件,,~/.lastbackup.log包含备份脚本上次运行时间的记录。

2. 创建包装调度程序脚本,,~/scheduler.sh放置在 Gnome 的启动应用程序中(~/.config/autostart),用于在每次启动时检查日志文件日期并决定是否运行主脚本:

#!/bin/bash
BACKUPINTERVAL=3 # in days
DATETODAY=$(date +"%Y-%m-%d")
DATELASTBACKUP=$(</path/to/.lastbackup.log) # get last backup date from logfile
DATEDIFF=$(( ($(date --date=$DATETODAY +%s) - $(date --date=$DATELASTBACKUP +%s) )/(60*60*24) ))
if [ "$DATEDIFF" -ge "$BACKUPINTERVAL" ] ; then
    # more than 3 days since last backup, so run script
    /usr/bin/x-terminal-emulator -e /path/to/backup.sh
fi

3.创建主备份脚本,,~/backup.sh在必要时运行:

#!/bin/bash
/usr/bin/dialog --yesno "Do backup now?" 8 40 # user can opt out
if [ $? -eq 0 ] ; then
    # do backup
    # user can check output to screen
    if [ $? = 0 ]; then
        # write date to logfile
        echo $(date +"%Y-%m-%d") > /path/to/.lastbackup.log
        echo 'Backup done'
        read
    fi
fi

相关内容