Назад | Перейти на главную страницу

Запустите Systemd Service Unit после монтирования тома AWS EBS

Я запускаю m5.large (нитро-основанный) Экземпляр EC2 из Ubuntu AMI и прикрепите том EBS. Там есть systemd как система инициализации по умолчанию. Как документация AWS «Создание тома Amazon EBS для использования в Linux» стойки, монтирую том EBS в данные пользователя:

#!/bin/bash

# Sleep gives the SSD drive a chance to mount before the user data script completes.
sleep 15

mkdir /application

mount /dev/nvme1n1 /application

Мне нужен Nginx и я предоставил для него конфигурацию сайта на томе EBS. По умолчанию nginx пакет с файлом модуля systemd я объявляю зависимость от монтирования с помощью RequiresMountsFor директива внутри drop-in:

# /lib/systemd/system/nginx.service

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target
# /etc/systemd/system/nginx.service.d/override.conf

[Unit]
RequiresMountsFor=/application

[Service]
Restart=always

Но это не помогает запускать Nginx только после завершения монтирования (в пользовательских данных) по какой-то причине. Я вижу крепление для /application путь, но я не вижу Required=application.mount как я и ожидал:

$ sudo systemctl show -p After,Requires nginx
Requires=system.slice sysinit.target -.mount
After=sysinit.target -.mount systemd-journald.socket basic.target application.mount system.slice network.target

Сервис Nginx все еще пытается запустить раньше cloud-init завершает выполнение пользовательских данных, исчерпывает все попытки запустить службу и терпит неудачу:

Apr 08 15:34:32 hostname nginx[1303]: nginx: [emerg] open() "/application/libexec/etc/nginx/nginx.site.conf" failed (2: No such file or directory) in /etc/nginx/sites-e
Apr 08 15:34:32 hostname nginx[1303]: nginx: configuration file /etc/nginx/nginx.conf test failed
Apr 08 15:34:32 hostname systemd[1]: nginx.service: Control process exited, code=exited status=1
Apr 08 15:34:32 hostname systemd[1]: Failed to start A high performance web server and a reverse proxy server.

Я предполагаю, что служба должна запускаться с помощью systemd при уведомлении о монтировании для указанного пути /application. Что мне не хватает?

Какой самый гибкий и правильный способ монтировать тома EBS в Ubuntu + systemd?