ubuntu创建定期rysnc同步服务

Create a Custom Systemd Service for Scheduled Rsync Backups on Ubuntu 22.04

原理

使用systemd服务,可以创建一个同名的backup-sync.timerbackup-sync.service/etc/systemd/system目录下,timer根据设定的时间自动出发service,然后将rsync备份脚本路径配置在service中便可达到效果。

具体步骤

添加rysnc脚本

sudo vim /usr/local/bin/backup-sync.sh

在里面添加如下内容:

#!/bin/bash
#/usr/local/bin/backup-sync.sh

# Configuration
SOURCE_DIR="source_dir"
REMOTE_HOST="user@dest_ip"
DEST_DIR="dest_dir"

# Check network connectivity
echo "Starting network check..."

if ! ping -c 1 8.8.8.8 >/dev/null 2>&1; then
    echo "ERROR: No internet connectivity"
    exit 1
fi

echo "Network check passed"

if ! timeout 100 ssh -q -o BatchMode=yes -o ConnectTimeout=50 $REMOTE_HOST "echo 2>&1"; then
        echo "ERROR: Cannot connect to remote server via SSH"
        exit 1
fi

echo "Ssh check passed"

echo "Starting rsync backup..."


rsync -avz "$SOURCE_DIR" "$REMOTE_HOST:$DEST_DIR"

if [ $? -eq 0 ]; then
    echo "Backup completed successfully"
    exit 0
else
    echo "ERROR: Backup failed with exit code $?"
    exit 1
fi

其中参数的意思如下

  • -a:archive 模式,是一系列flag的组合包括如下内容
    • -r recursive模式,拷贝包括子目录
    • -l 拷贝软链接
    • -p 保留权限
    • -t 保留修改时间
    • -g 保留用户和组信息
    • -o 保留所有者
    • -D 保留设备文件和特殊文件
  • -v 打印出具体信息包括拷贝的文件
  • -z 拷贝前进行压缩,如果拷贝的是视频或者已经压缩过的文件可以省略这个flag
  • –delete 如果源目录删除某个文件,则将在目标目录也删除对应的文件(此flag比较危险,如果目标目录也可能有修改则应去掉这个参数)

最后给脚本运行的权限:

sudo chmod +x /usr/local/bin/backup-sync.sh

添加systemd service文件

sudo vim /etc/systemd/system/backup-sync.service

在文件中添加如下内容

[Unit]
Description=Rsync Backup Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup-sync.sh
User=your-username

[Install]
WantedBy=multi-user.target

添加timer文件

sudo vim /etc/systemd/system/backup-sync.timer

在文件中添加如下内容

[Unit]
Description=Timer for Rsync Backup Service

[Timer]
OnBootSec=15min
OnUnitActiveSec=6h
AccuracySec=1min

[Install]
WantedBy=timers.target

服务开机自启

# Reload systemd to recognize new service
sudo systemctl daemon-reload

# Enable and start the timer
sudo systemctl enable backup-sync.timer
sudo systemctl start backup-sync.timer

# You can also run the service manually to test
sudo systemctl start backup-sync.service

注意不能enable backup-sync.service,因为service应该由timer触发,如果enable backup-sync.service,那么开机可能触发两次导致重复。

后续查看log信息

运行命令:

journalctl -u backup-sync.service
文章标题:ubuntu创建定期rysnc同步服务
文章作者:Myron
转载链接:https://phyiscs.com/create-a-custom-systemd-service-for-scheduled-rsync-backups-on-ubuntu-22-04.html
上一篇
下一篇