关机时运行 rclone sync

关机时运行 rclone sync

我希望我的云存储同步在系统关闭期间执行。为此,我使用 rclone 和 MEGA 云存储。因此,感谢指南作者,我得到了以下内容:

运行关机服务:

[Unit]
Description=Syncing with MEGA cloud storage
DefaultDependencies=no
Before=shutdown.target halt.target
RequiresMountsFor=/home/yevhenii
After=network-online.target

[Service]
Type=oneshot
User=yevhenii
ExecStart=/home/yevhenii/Projects/ubuntu-scripts/mega_sync_pc.sh

[Install]
WantedBy=halt.target shutdown.target

它运行的简单脚本:

REBOOT=$( systemctl list-jobs | egrep -q 'reboot.target.*start' && echo "rebooting" || echo "not_rebooting" )

if [ $REBOOT = "not_rebooting" ]; then

    echo "Syncronizing Projects" >> /home/yevhenii/log.txt
    #rclone check /home/yevhenii/Projects mega:Projects >> /home/yevhenii/log.txt
    rclone sync /home/yevhenii/Projects mega:Projects >> /home/yevhenii/log.txt
    echo "" >> /home/yevhenii/log.txt

    REPORT=$(systemctl status run_on_shutdown)
    echo $REPORT >> /home/yevhenii/log.txt

fi

结果:它不起作用。此脚本在关机时运行,但我没有收到来自 rclone 的任何消息。它仅在日志文件中打印“同步项目”。同步和检查均不起作用。这有什么问题?在命令行中执行“rclone check”会导致非常快速的响应(1-2 秒),而关机时间延长至 10 秒甚至更长。

答案1

我认为您需要在该部分中放置ExecStop=一行和多行适当的线条。After=[Service]


无论如何,我有一个类似的脚本。它不执行rsync;但它在系统启动期间以及系统停止期间执行其他与网络相关的操作。

我正在使用以下服务定义(文件/lib/systemd/system/zzz-my-sss.service:)

[Unit]
Description=Execute system START and STOP script
After=network.target syslog.target
After=systemd-user-sessions.service
After=network-online.target

[Service]
User=_my_user_
Type=oneshot
ExecStart=/home/_my_user_/path/to/my/script.sh START
RemainAfterExit=true
ExecStop=/home/_my_user_/path/to/my/script.sh STOP
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

_my_user_是我的普通 Ubuntu 用户。该脚本/home/_my_user_/path/to/my/script.sh将在系统启动期间(网络启动后)使用参数 调用START。同样,它将在系统关闭期间(网络关闭前)使用参数 调用STOP

您应该使用以下方式启用此服务:

# systemctl enable zzz-my-sss.service

您可以使用以下方式手动启动/停止它:

# systemctl start zzz-my-sss.service
# systemctl status zzz-my-sss.service
# systemctl list-units | grep zzz-my-sss.service
# systemctl stop zzz-my-sss.service

并使用以下命令禁用它:

# systemctl disable zzz-my-sss.service

如果您更新它,请不要忘记运行:

# systemctl daemon-reload

答案2

经过多次尝试,我终于找到了解决方案。我找不到如何让 auto-sync.sh 仅在关机时运行的方法。所以,我找到了用 bash 检查它的方法。

服务文件

[Unit]
Description=Syncing with MEGA cloud storage v100
After=network-online.target

[Service]
User=yevhenii
Type=oneshot
ExecStart=/bin/true
ExecStop=/path_to_your_script/auto-sync.sh
RemainAfterExit=true
TimeoutStopSec=0
StandardOutput=tty
StandardError=inherit

[Install]
WantedBy=multi-user.target

脚本文件

REBOT_FACTOR=$( systemctl list-jobs | egrep -q 'reboot.target.*start' && echo "rebooting" || echo "not_rebooting" )

if [[ "$REBOT_FACTOR" == "not_rebooting" ]]; then
    # You can perform your rclone sync right here.
    # Code here will be started only at shutdown.
fi

相关内容