You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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类型的服务,确保它在关机/重启前触发。

  1. 创建完整的服务文件
    创建/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环境:

  1. 创建脚本文件/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
  1. 给脚本添加执行权限:
chmod +x /home/debian9/backup-script.sh

三、配置sudo免密(关键步骤)

脚本里用到了sudo来启停privoxy,而systemd执行任务时不会弹出密码输入框,所以必须配置免密权限:

  1. 用visudo创建免密规则(避免直接编辑sudoers文件出错):
sudo visudo -f /etc/sudoers.d/debian9-backup
  1. 写入以下内容:
debian9 ALL=(ALL) NOPASSWD: /usr/sbin/service privoxy start, /usr/sbin/service privoxy stop
  1. 设置规则文件的正确权限:
sudo chmod 0440 /etc/sudoers.d/debian9-backup

四、启用并测试服务

  1. 重新加载systemd配置:
sudo systemctl daemon-reload
  1. 启用服务,让它在关机/重启时自动触发:
sudo systemctl enable dropbox-backup.service
  1. 手动测试服务是否正常工作:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:22:30