Как запланировать нестандартный сценарий резервного копирования, требующий подтверждения пользователя

У меня есть резервный скрипт, который требует взаимодействия с пользователем. Я хотел бы запланировать его запуск, скажем, раз в неделю.

Ограничения заключаются в том, что (1) компьютер загружается прямо в Gnome и ежедневно выключается, (2) пользователь должен иметь возможность отказаться от запуска сценария и увидеть любой вывод сценария на экране.

Я понимаю, что Gnome Scheduler использует anacron для еженедельных заданий cron, и что пропущенные задания запускаются при запуске. Но это бесполезно, если заданию требуется окно терминала для подтверждения пользователя, потому что скрипт будет запущен до запуска Gnome.

Gnome, конечно же, имеет Startup Applications для запуска программ при запуске. Но это очень полезно, поскольку я не хочу, чтобы мой скрипт запускался при каждом запуске.

Решение?

1
задан 19 July 2014 в 14:28

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
0
ответ дан 19 July 2014 в 14:28

Другие вопросы по тегам:

Похожие вопросы: