如何在 KDE plasma 的通知区域显示 rsync 备份脚本的进度?

如何在 KDE plasma 的通知区域显示 rsync 备份脚本的进度?

我搜索了好久,但还是没找到关于如何在 KDE plasma 中添加进度条或进度通知的教程。我的目标很简单:制作一个 rsync 备份脚本,由 cron/anacron 启动并放置在 /sbin 中,以 root 身份运行并备份我的整个系统(通过 ssh)。此外,脚本启动时在 KDE plasma 的通知区域中显示进度条由 cron/anacron 执行。到目前为止,我使用了来自 ubuntuusers.de 的脚本: https://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC/

谢谢!

答案1

好的,我找到了一个使用 zenity 的好解决方案。下面我为不熟悉所有这些管理内容的用户附加了一些待办事项 ;)... 脚本正在做什么:

  • 检查远程主机是否可以访问
  • 询问您是否要在 GUI 中执行备份(使用 Zenity)
  • 使用 rsync 和 ssh 备份到远程机器
  • 已安装软件包的备份列表
  • 脚本用于对 / 及其所有子目录执行完整系统备份
  • 使用 anacron/cron 每天自动执行一次

脚本如下:

#!/bin/bash

#preperations...

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:
export DISPLAY=:0.0
export XAUTHORITY=/home/$USER/.Xauthority

#check if host is reachable

ping -c1 -W1 -q $iptoremotehost &>/dev/null #put in the host adress here
status=$( echo $? )
if [[ $status == 0 ]] ; then

#ask if backup should be performed if the remote host is reachable
 if
    ! zenity --question --text "Grab a coffee and perform backup?"; then exit;
 fi
#backup Packages

 dpkg --get-selections > /pathtoyour/Packages.txt #file needs to be created first

#backup whole machine with some excluded folders (not to produce infinite loops). Take care of -i param in rsync because by default it is not using the right private key for ssh connection (in my case this was a problem).

 rsync --rsync-path="sudo rsync" --delete --exclude-from='/pathtoyour/rsync_exclude.txt' -aAXPv -e 'ssh -i /pathtoyour/privatekey' $yoursourcedirectory rsyncuser@$iptoremotehost:$yourdestinationdirectory |
    awk -f /pathtoyour/rsync.awk | #this file must be created first!
    zenity --progress --title "Full System Backup" \
       --text="In process..." --percentage=0 --auto-kill

else
   exit   
fi

要让它工作,请执行以下操作:

  1. 创建文件rsync.awk、rsync_exclude-txt(内容见下文)
  2. 将备份脚本放入 /etc/cron.daily 并使其可执行
  3. 使用公钥设置 ssh 连接,当 ssh 连接到主机时,它将替换密码。(参见: https://www.cyberciti.biz/faq/how-to-set-up-ssh-keys-on-linux-unix/
  4. 在远程主机上创建一个 $rsyncuser,并创建一个组,将 rsyncuser 和普通用户添加到该组中。更改权限,以便新组可以访问和写入备份的 $destinationpath。不要忘记为新用户安装 ssh 密钥,这样 ssh 时就不需要密码了!

  5. 为了保留备份文件和目录的正确权限,您必须允许 $rsyncuser 运行sudo rsync (在远程机器上)而无需密码提示:sudo visudo并添加rsyncuser ALL = NOPASSWD: /usr/bin/rsync

拿一杯啤酒并进行备份!

rsync.awk:

{
   if (index($0, "to-chk=") > 0)
   {
    split($0, pieces, "to-chk=")
    split(pieces[2], term, ")");
    split(term[1], division, "/");
    print (1-(division[1]/division[2]))*100"%"
   }
   else
   {
    print "#"$0;
   }
   fflush();
}

rsync_排除.txt:

dev*
proc*
sys*
tmp*
run*
mnt*
lost+found*
home/$USER/.ssh/*

不要忘记添加 ssh 连接私钥所在的目录。否则将是一个安全问题!

欢迎提供反馈!

相关内容