ユーザーの操作が必要なバックアップスクリプトがあります。たとえば、週に1回実行するようにスケジュールしたいと思います。
制約は、(1)コンピューターがGnomeで直接起動し、毎日オフになっていること、(2)ユーザーがスクリプトの実行をオプトアウトして、画面にスクリプト出力を表示できる必要があることです。
Gnomeスケジューラが毎週のcronジョブにanacron
を使用し、欠落したジョブが起動時に実行されることを理解しています。ただし、Gnomeが起動する前にスクリプトが実行されるため、ジョブでユーザー確認用のターミナルウィンドウが必要な場合は、これは役に立ちません。
もちろん、Gnomeには、起動時にプログラムを実行するための起動アプリケーションがあります。しかし、起動のたびにスクリプトを実行したくないので、これは非常に役立ちます。
解決策?
コメントのフィードバックに一部基づいて、これが私が思いついた解決策です。
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