我正在尝试在实例终止之前将日志文件发送到S3。我在.service中创建了/lib/systemd/system-shutdown/upload-backup.service文件,就是这样。
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。
但是,当关闭或重新启动时,脚本不会运行。请解释这个错误和我哪里错了。
发布于 2019-01-01 15:29:54
对我起作用的诀窍是使用服务单元的ExecStop=来运行脚本,但是服务单元在其他方面是“正常的”,即WantedBy=multi-user.target。
为了确保在执行命令时网络仍然可用,我添加了After=network.target。
因为我关心某个特定服务生成的日志文件,所以我添加了Before=interesting.service --以确保命令只在有趣的服务停止后才运行。
注意,当停止单元时,systemd反向应用Before=和After=的顺序依赖项,因此上面的内容与预期的一样。
为了更好地衡量,我还设置了User=和Group=,这样脚本就不会以root形式运行。
[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启动它。
一旦启用,服务将在引导时自动启动。一旦启动,它将坐在那里什么都不做,直到关闭,并在关闭时,它将运行脚本。
https://serverfault.com/questions/945633
复制相似问题