首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在关机时运行rclone

在关机时运行rclone
EN

Ask Ubuntu用户
提问于 2020-04-05 20:34:35
回答 2查看 427关注 0票数 0

我希望在系统关闭期间执行云存储同步。为此,我在超级云存储中使用rclone。所以,谢谢你们的指导,我接了下一个:

run_on_shutdown.service:

代码语言:javascript
复制
[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

以及它运行的简单脚本:

代码语言:javascript
复制
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‘会产生非常快的响应(1-2秒),同时关闭的时间会延长到10秒甚至更长。

EN

回答 2

Ask Ubuntu用户

发布于 2020-04-06 13:01:36

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

总之,我有一个类似的剧本。它不做rsync;但是它在系统启动和系统停止期间做其他与网络相关的事情。

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

代码语言:javascript
复制
[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调用。

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

代码语言:javascript
复制
# systemctl enable zzz-my-sss.service

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

代码语言:javascript
复制
# 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

并使用以下方法禁用它:

代码语言:javascript
复制
# systemctl disable zzz-my-sss.service

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

代码语言:javascript
复制
# systemctl daemon-reload
票数 0
EN

Ask Ubuntu用户

发布于 2020-10-12 19:04:35

经过多次尝试,我终于找到了解决办法。我无法找到使自动同步系统只在关机时运行的方法。所以,我找到了用bash检查它的方法。

服务档案

代码语言:javascript
复制
[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

脚本文件

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1224447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档