首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在系统关闭时运行备份脚本(例如,在通过自动缩放终止实例之前将日志复制到S3 )

在系统关闭时运行备份脚本(例如,在通过自动缩放终止实例之前将日志复制到S3 )
EN

Server Fault用户
提问于 2018-12-17 10:35:46
回答 1查看 2.5K关注 0票数 4

我正在尝试在实例终止之前将日志文件发送到S3。我在.service中创建了/lib/systemd/system-shutdown/upload-backup.service文件,就是这样。

代码语言:javascript
复制
Description=Testing
Before=shutdown.target reboot.target halt.target
Requires=network-online.target network.target
DefaultDependencies=no
[Service]
ExecStart=/bin/true
ExecStop=/home/ubuntu/upload_log_to_s3.sh
RemainAfterExit=yes
Type=oneshot
[Install]
WantedBy=multi-user.target

注意:upload_log_to_s3是家庭中的脚本,并复制文件。这是独立工作的,所以没有问题。

我还在/etc/systemd/system/shutdown.target.wants/中为这个文件创建了一个软链接,并启用了systemctl。

但是,当关闭或重新启动时,脚本不会运行。请解释这个错误和我哪里错了。

EN

回答 1

Server Fault用户

发布于 2019-01-01 15:29:54

对我起作用的诀窍是使用服务单元的ExecStop=来运行脚本,但是服务单元在其他方面是“正常的”,即WantedBy=multi-user.target

为了确保在执行命令时网络仍然可用,我添加了After=network.target

因为我关心某个特定服务生成的日志文件,所以我添加了Before=interesting.service --以确保命令只在有趣的服务停止后才运行。

注意,当停止单元时,systemd反向应用Before=After=的顺序依赖项,因此上面的内容与预期的一样。

为了更好地衡量,我还设置了User=Group=,这样脚本就不会以root形式运行。

代码语言:javascript
复制
[Unit]
Before=interesting.service
After=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStop=/home/ubuntu/upload_log_to_s3.sh
User=ubuntu
Group=ubuntu
[Install]
WantedBy=multi-user.target

将文件放置在/etc/systemd/system/upload-backup.service;启用并使用sudo systemctl enable upload-backup.service --now启动它。

一旦启用,服务将在引导时自动启动。一旦启动,它将坐在那里什么都不做,直到关闭,并在关闭时,它将运行脚本。

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/945633

复制
相关文章

相似问题

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