Я запускаю 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?