2016-12-14 9 views
5

Я создал сценарий службы с именем "puma.service" в /etc/systemd/system/ со следующим содержанием:Невозможно создать Systemd сценарий для Puma

[Unit] 
Description=Puma HTTP Server 
After=network.target 

[Service] 
Type=simple 

User=ubuntu 

WorkingDirectory=/home/username/appdir/current 

ExecStart=/bin/bash -lc "/home/username/appdir/current/sbin/puma -C /home/username/appdir/current/config/puma.rb /home/username/appdir/current/config.ru" 

Restart=always 

[Install] 
WantedBy=multi-user.target 

Я включил службу и при запуске, я получаю следующий журнал из systemctl:

● puma.service - Puma HTTP Server 
    Loaded: loaded (/etc/systemd/system/puma.service; enabled; vendor preset: enabled) 
    Active: inactive (dead) (Result: exit-code) since Wed 2016-12-14 10:09:46 UTC; 12min ago 
    Process: 16889 ExecStart=/bin/bash -lc cd /home/username/appdir/current && bundle exec puma -C /home/username/appdir.. 
Main PID: 16889 (code=exited, status=127) 

Dec 14 10:09:46 ip-172-31-29-40 systemd[1]: puma.service: Main process exited, code=exited, status=127/n/a 
Dec 14 10:09:46 ip-172-31-29-40 systemd[1]: puma.service: Unit entered failed state. 
Dec 14 10:09:46 ip-172-31-29-40 systemd[1]: puma.service: Failed with result 'exit-code'. 
Dec 14 10:09:46 ip-172-31-29-40 systemd[1]: puma.service: Service hold-off time over, scheduling restart. 
Dec 14 10:09:46 ip-172-31-29-40 systemd[1]: Stopped Puma HTTP Server. 
Dec 14 10:09:46 ip-172-31-29-40 systemd[1]: puma.service: Start request repeated too quickly. 
Dec 14 10:09:46 ip-172-31-29-40 systemd[1]: Failed to start Puma HTTP Server. 

Хотя, когда я предоставляю команду в терминале SSH, сервер запускается и работает безупречно. Есть ли какие-либо изменения, которые я должен внести в файл службы?

Примечание:

  1. Я изменил dirnames для вашего удобства.
  2. Я провел некоторое исследование и причина статуса 127 из-за исполняемого файла не в пути. Но, я думаю, это не проблема.

Можете ли вы пролить свет?

ответ

4

Я нашел эту проблему и изменил ExecStart, как указано ниже, и он работал как шарм:

ExecStart=/home/username/.rbenv/shims/bundle exec puma -e production -C ./config/puma.rb config.ru 
PIDFile=/home/username/appdir/shared/tmp/pids/puma.pid 

bundle должны быть взяты из rbenv прокладками, а также конфигурационный файл Пума в (config/puma.rb) и конфигурационный файл приложения (config.ru) может быть задан по относительной траектории.

+0

Любая идея, если это будет работать иначе в rvm? Я пробовал это, используя соответствующие пути в rvm и все равно получаю тот же результат. – unclesol

+0

Извините, я понятия не имею. Никогда не пробовал rvm, все мои сценарии развертывания были в rbenv. –

0

Один из способов решения этого вопроса - указать файл PID, и системаd примет этот файл, чтобы проверить статус службы.

Вот как мы используем это в наших сценариях (адаптированный к вашему данного образца)

ExecStart=/bin/bash -lc '/home/username/appdir/current/sbin/puma -C /home/username/appdir/current/config/puma.rb /home/username/appdir/current/config.ru --pidfile /home/username/appdir/current/tmp/pids/puma.pid' 
PIDFile=/home/username/appdir/current/tmp/pids/puma.pid 

Примите к сведению, что вы, возможно, придется настроить --pidfile с помощью файла -C puma.rb вместо передачи его в качестве параметра. Я просто показываю это здесь, чтобы проиллюстрировать, что --pidfile (в конфигурации puma) должен быть таким же, как PIDFile в служебном файле.

Что касается сообщения об ошибке, я не уверен в себе и тоже заинтересован в ответе.

 Смежные вопросы

  • Нет связанных вопросов^_^