У меня есть резервный скрипт, который требует взаимодействия с пользователем. Я хотел бы запланировать его запуск, скажем, раз в неделю.
Ограничения заключаются в том, что (1) компьютер загружается прямо в Gnome и ежедневно выключается, (2) пользователь должен иметь возможность отказаться от запуска сценария и увидеть любой вывод сценария на экране.
Я понимаю, что Gnome Scheduler использует anacron
для еженедельных заданий cron, и что пропущенные задания запускаются при запуске. Но это бесполезно, если заданию требуется окно терминала для подтверждения пользователя, потому что скрипт будет запущен до запуска Gnome.
Gnome, конечно же, имеет Startup Applications для запуска программ при запуске. Но это очень полезно, поскольку я не хочу, чтобы мой скрипт запускался при каждом запуске.
Решение?
Базирующийся частично на обратной связи в комментариях, вот решение, которое я предложил.
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