web-dev-qa-db-ja.com

ユーザーの確認を必要とする不規則なバックアップスクリプトをスケジュールする方法

ユーザーの操作が必要なバックアップスクリプトがあります。たとえば、週に1回実行するようにスケジュールしたいと思います。

制約は、(1)コンピューターがGnomeで直接起動し、毎日オフになっていること、(2)ユーザーがスクリプトの実行をオプトアウトして、画面にスクリプト出力を表示できる必要があることです。

Gnomeスケジューラが毎週のcronジョブにanacronを使用し、欠落したジョブが起動時に実行されることを理解しています。ただし、Gnomeが起動する前にスクリプトが実行されるため、ジョブでユーザー確認用のターミナルウィンドウが必要な場合は、これは役に立ちません。

もちろん、Gnomeには、起動時にプログラムを実行するための起動アプリケーションがあります。しかし、起動のたびにスクリプトを実行したくないので、これは非常に役立ちます。

解決策?

1
Sqerstet

コメントのフィードバックに一部基づいて、これが私が思いついた解決策です。

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

。メインバックアップスクリプトを作成します~/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
Sqerstet