在 AWS 用户数据运行后启动服务

Bry*_*yan 7 ubuntu amazon-web-services systemd ubuntu-16.04

我正在基于 Ubuntu 16.04 AMI 构建一个 AMI。

当我从我的 AMI 启动一个实例时,我想传入一个在 AMI 上启动服务之前运行的用户数据脚本。

看起来用户数据在cloud-final.service. 如果我systemctl status cloud-finaljournalctl -u cloud-final我看到我的用户数据脚本的输出。

我尝试设置我的 .service 文件以在 cloud-final.service 之后启动服务

[Unit]
Description=My Service
After=network.service
After=cloud-final.service

...
Run Code Online (Sandbox Code Playgroud)

但是 cloud-final 有RemainAfterExit=yes,这意味着它永远不会完成,所以我的服务永远不会启动。

在运行用户数据脚本,如何配置 AWS Ubuntu 以启动我的服务?

小智 7

[Unit]
…
After=cloud-final.service
…
[Install]
WantedBy=cloud-init.target
Run Code Online (Sandbox Code Playgroud)

我也遇到了这个。journalctl显示在达到multi-user目标之后和之前运行的用户数据内容cloud-init

<timestamp> <ip_addr> systemd[1]: Reached target Multi-User System.
[snip]
<timestamp> <ip_addr> systemd[1]: Starting Execute cloud user/final scripts...
<timestamp> <ip_addr> user-data[1592]: my user data stuff
[snip]
<timestamp> <ip_addr> systemd[1]: Started Execute cloud user/final scripts.
[snip]
<timestamp> <ip_addr> systemd[1]: Reached target Cloud-init target.
Run Code Online (Sandbox Code Playgroud)

所以我认为它是需要/想要的,cloud-init而不是通常的multi-user目标(这可能是 op 所拥有的),并且它只是有效。