如何在Debian 9关机/重启前自动将MariaDB数据库上传至DropBox?
实现Debian 9关机/重启前自动备份MariaDB并上传Dropbox的完整方案
先跟你梳理下你的现状:目前你在Debian 9图形模式的非登录交互式shell里,每次关机或重启前手动敲upload-dropbox命令,就能完成MariaDB备份并上传到Dropbox。你的/home/debian9/.bashrc里已经写好了相关函数:
$dir=$HOME/backup ss-bwg(){ /usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss-bwg.json & } backup(){ USERNAME="xxxx" PASSWORD="xxxx" mysqldump -u root -pxyzzy wpdatabase > $dir/wp.sql.bak } upload-dropbox(){ backup ss-bwg export https_proxy=http://127.0.0.1:8118 sudo service privoxy start cd $dir Dropbox-Uploader/dropbox_uploader.sh upload * / sudo service privoxy stop unset https_proxy date >> $dir/dropbox.log }
你已经尝试用systemd服务来实现自动化,但还没写完配置。我给你完善一套可行的方案:
一、完善systemd服务配置
因为systemd在关机时执行任务有特殊要求,我们需要创建一个oneshot类型的服务,确保它在关机/重启前触发。
- 创建完整的服务文件
创建/etc/systemd/system/dropbox-backup.service,写入以下内容:
[Unit] Description=自动备份MariaDB并上传到Dropbox(关机/重启前执行) Before=shutdown.target reboot.target halt.target DefaultDependencies=no [Service] Type=oneshot User=debian9 WorkingDirectory=/home/debian9 ExecStart=/bin/bash -c '/home/debian9/backup-script.sh' TimeoutStartSec=0 [Install] WantedBy=shutdown.target reboot.target halt.target
二、把备份逻辑移到独立脚本
systemd执行时不会加载用户的.bashrc函数,所以我们把upload-dropbox的逻辑单独放到一个可执行脚本里,避免依赖shell环境:
- 创建脚本文件
/home/debian9/backup-script.sh:
#!/bin/bash dir=$HOME/backup # 定义备份函数 backup(){ USERNAME="xxxx" PASSWORD="xxxx" mysqldump -u root -pxyzzy wpdatabase > $dir/wp.sql.bak } # 启动sslocal代理 ss-bwg(){ /usr/bin/nohup /usr/local/bin/sslocal -c /etc/ss-bwg.json & # 给sslocal一点启动时间 sleep 2 } # 执行备份 backup ss-bwg # 配置代理并上传到Dropbox export https_proxy=http://127.0.0.1:8118 sudo service privoxy start # 等待privoxy启动完成 sleep 1 cd $dir ./Dropbox-Uploader/dropbox_uploader.sh upload * / sudo service privoxy stop unset https_proxy # 记录执行时间到日志 date >> $dir/dropbox.log
- 给脚本添加执行权限:
chmod +x /home/debian9/backup-script.sh
三、配置sudo免密(关键步骤)
脚本里用到了sudo来启停privoxy,而systemd执行任务时不会弹出密码输入框,所以必须配置免密权限:
- 用
visudo创建免密规则(避免直接编辑sudoers文件出错):
sudo visudo -f /etc/sudoers.d/debian9-backup
- 写入以下内容:
debian9 ALL=(ALL) NOPASSWD: /usr/sbin/service privoxy start, /usr/sbin/service privoxy stop
- 设置规则文件的正确权限:
sudo chmod 0440 /etc/sudoers.d/debian9-backup
四、启用并测试服务
- 重新加载systemd配置:
sudo systemctl daemon-reload
- 启用服务,让它在关机/重启时自动触发:
sudo systemctl enable dropbox-backup.service
- 手动测试服务是否正常工作:
sudo systemctl start dropbox-backup.service
执行完后检查$HOME/backup/dropbox.log是否有新的时间记录,同时登录Dropbox确认备份文件是否上传成功。
几个注意点
- 确保你已经正确配置过
Dropbox-Uploader(手动执行Dropbox-Uploader/dropbox_uploader.sh upload * /能正常工作) - 检查
sslocal和privoxy的配置文件路径是否正确,手动启动这两个服务确认能正常提供代理 - 如果
Dropbox-Uploader不在/home/debian9目录下,记得把脚本里的路径改成绝对路径
内容的提问来源于stack exchange,提问作者scrapy
相关产品推荐
相关产品推荐

