我希望在系统关闭期间执行云存储同步。为此,我在超级云存储中使用rclone。所以,谢谢你们的指导,我接了下一个:
run_on_shutdown.service:
[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‘会产生非常快的响应(1-2秒),同时关闭的时间会延长到10秒甚至更长。
发布于 2020-04-06 13:01:36
我认为您需要在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发布于 2020-10-12 19:04:35
经过多次尝试,我终于找到了解决办法。我无法找到使自动同步系统只在关机时运行的方法。所以,我找到了用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.
fihttps://askubuntu.com/questions/1224447
复制相似问题