我有一个需要用户交互的备份脚本。我想安排它每周运行一次。
限制是:(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