Почему процесс systemd останавливается сразу после запуска процесса foreman server?

Я пытаюсь экспортировать простое приложение Ruby с помощью foreman. На основе его использование для systemd, я, кажется, делаю все правильно.

однако, когда я запускаю цель / службу, я получаю сообщения о состоянии примерно так:

systemd[1]: Starting app-web-1.service...
systemd[1]: Started app-web-1.service.
systemd[1]: Service app-web-1.service is not needed anymore. Stopping.
systemd[1]: Stopping app-web-1.service...
systemd[1]: Stopped app-web-1.service.

процесс начинается, то заканчивается. Я понятия не имею, почему это происходит.

конечно, я не эксперт в systemd. Это мой первый раз, когда дело со сценариями службы, поэтому я не уверен, есть ли что-то в сгенерированных файлах, что является причиной этого.

при экспорте через foreman создается несколько целевых и служебных файлов. Таким образом, есть несколько, с которыми мне приходится иметь дело.

вот содержание приложения.цель:

[Unit]
StopWhenUnneeded=true
Wants=app-web.target

[Install]
WantedBy=multi-user.target

и содержание app-web-1.цель:

[Unit]
StopWhenUnneeded=true
Wants=app-web-1.service

наконец, app-web-1.обслуживание:

[Unit]
StopWhenUnneeded=true

[Service]
User=deployer
WorkingDirectory=/home/deployer/app/releases/20141202043054
Environment=PORT=5000
ExecStart=/bin/bash -lc 'bundle exec puma -p 5000 '
Restart=always
StandardInput=null
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=%n
KillMode=process

очевидно, StopWhenUnneeded является частью проблемы, но я не уверен, что это должны делать в контексте запуск веб-сервера в приложении.

может ли кто-нибудь помочь мне понять, как заставить сервер работать и постоянно?

6
задан Pori
16.05.2023 1:31 Количество просмотров материала 2436
Распечатать страницу

2 ответа

в то время как grawity был большим подспорьем в выяснении проблемы, я наконец-то решил, выполнив простую, но упущенную команду:

sudo systemctl enable app.target

вот и все. Просто включите цель, и сервис будет работать как шарм.

CoreOS docs помогли мне разобраться.

2
отвечен Pori 2023-05-17 09:19

а в справочника,StopWhenUnneeded=true означает "остановить данное устройство, как только от него больше не зависят другие активные устройства".

например, если вы начинаете app.target, Это зависит от того app-web-1.target, который также будет запущен, и также зависит от app-web-1.service.

но если ты остановка главная app.target позже, обычно это не влияет на два других блока вообще - у них нет зависимостей в" обратном " направлении, так что оба app-web-1.target и app-web-1.service будет продолжать работать.

другими словами, наиболее вероятное намерение состояло в том, чтобы позволить остановить все, используя только systemctl stop app.target, без остановки каждую услугу вручную. это бы сработало если настройка была только в " Sub " - unit файлах (хотя это не идеально-bindsto= в данном случае лучше).

так что проблема с StopWhenUnneeded= в главном приложении.целевое подразделение. Так как вы запускаете его вручную, он никогда не имеет любой другие подразделения в зависимости от его, поэтому он будет остановлен немедленно.

0
отвечен grawity 2023-05-17 11:36

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

centos
ruby
services
systemctl
systemd
Вверх