我搜索了好久,但还是没找到关于如何在 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
要让它工作,请执行以下操作:
- 创建文件rsync.awk、rsync_exclude-txt(内容见下文)
- 将备份脚本放入 /etc/cron.daily 并使其可执行
- 使用公钥设置 ssh 连接,当 ssh 连接到主机时,它将替换密码。(参见: https://www.cyberciti.biz/faq/how-to-set-up-ssh-keys-on-linux-unix/)
在远程主机上创建一个 $rsyncuser,并创建一个组,将 rsyncuser 和普通用户添加到该组中。更改权限,以便新组可以访问和写入备份的 $destinationpath。不要忘记为新用户安装 ssh 密钥,这样 ssh 时就不需要密码了!
为了保留备份文件和目录的正确权限,您必须允许 $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 连接私钥所在的目录。否则将是一个安全问题!
欢迎提供反馈!