puma systemd 脚本不启动 puma
puma systemd script doesn't start puma
我一直在从多个来源复制和粘贴以下 puma 系统启动脚本的片段,但它不起作用。系统是 Debian 9.6,用户 rails
通过 rvm
安装了 ruby。用户 rails
可以启动命令 RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon
这个脚本有什么问题?
[Unit]
Description=Test Puma HTTP Server
After=network.target
[Service]
Type=simple
User=rails
WorkingDirectory=/var/www/test-optimum/current
ExecStart=/bin/bash -lc 'RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon'
ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop
PIDFile=/var/www/test-optimum/shared/tmp/pids/puma.pid
Restart=always
[Install]
WantedBy=multi-user.target
当我尝试用 systemctl start puma
启动它时,我得到了这个错误:
● test-puma.service - test Puma HTTP Server
Loaded: loaded (/etc/systemd/system/test-puma.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2019-01-04 17:10:43 CET; 6min ago
Process: 3351 ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop (code=exited, status=1/FAILURE)
Process: 3239 ExecStart=/bin/bash -lc RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon (code=exited, status=0/SUCCESS)
Main PID: 3239 (code=exited, status=0/SUCCESS)
CPU: 1.179s
Jan 04 17:10:42 test.example.com systemd[1]: test-puma.service: Unit entered failed state.
Jan 04 17:10:42 test.example.com systemd[1]: test-puma.service: Failed with result 'exit-code'.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Service hold-off time over, scheduling restart.
Jan 04 17:10:43 test.example.com systemd[1]: Stopped test Puma HTTP Server.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Start request repeated too quickly.
Jan 04 17:10:43 test.example.com systemd[1]: Failed to start test Puma HTTP Server.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Unit entered failed state.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Failed with result 'exit-code'.
What is wrong with this script?
可能只是服务类型:
Main PID: 3239 (code=exited, status=0/SUCCESS)
似乎主进程正在分叉。尝试 forking
而不是 simple
:https://www.freedesktop.org/software/systemd/man/systemd.service.html#Options
解决方法如下:
[Unit]
Description=Test Puma HTTP Server
After=network.target
[Service]
Type=simple
User=rails
WorkingDirectory=/var/www/test-optimum/current
ExecStart=/bin/bash -lc 'RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb'
ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop
PIDFile=/var/www/test-optimum/shared/tmp/pids/puma.pid
Restart=always
[Install]
WantedBy=multi-user.target
在我的例子中,我在 ExecStart
中有错误的命令,更新为这样的东西就成功了 ExecStart=/bin/bash -lc 'RAILS_ENV=production bundle exec puma -C /home/ubuntu/rails_current_server/config/puma.rb'
改进的解决方案可以是:
[Unit]
Description=Test Puma HTTP Server
After=network.target
[Service]
Type=simple
User=rails
WorkingDirectory=/var/www/test-optimum/current
ExecStart=/home/rails/.rvm/bin/rvm default do bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon
ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop
PIDFile=/var/www/test-optimum/shared/tmp/pids/puma.pid
Restart=always
[Install]
WantedBy=multi-user.target
我一直在从多个来源复制和粘贴以下 puma 系统启动脚本的片段,但它不起作用。系统是 Debian 9.6,用户 rails
通过 rvm
安装了 ruby。用户 rails
可以启动命令 RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon
这个脚本有什么问题?
[Unit]
Description=Test Puma HTTP Server
After=network.target
[Service]
Type=simple
User=rails
WorkingDirectory=/var/www/test-optimum/current
ExecStart=/bin/bash -lc 'RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon'
ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop
PIDFile=/var/www/test-optimum/shared/tmp/pids/puma.pid
Restart=always
[Install]
WantedBy=multi-user.target
当我尝试用 systemctl start puma
启动它时,我得到了这个错误:
● test-puma.service - test Puma HTTP Server
Loaded: loaded (/etc/systemd/system/test-puma.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2019-01-04 17:10:43 CET; 6min ago
Process: 3351 ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop (code=exited, status=1/FAILURE)
Process: 3239 ExecStart=/bin/bash -lc RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon (code=exited, status=0/SUCCESS)
Main PID: 3239 (code=exited, status=0/SUCCESS)
CPU: 1.179s
Jan 04 17:10:42 test.example.com systemd[1]: test-puma.service: Unit entered failed state.
Jan 04 17:10:42 test.example.com systemd[1]: test-puma.service: Failed with result 'exit-code'.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Service hold-off time over, scheduling restart.
Jan 04 17:10:43 test.example.com systemd[1]: Stopped test Puma HTTP Server.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Start request repeated too quickly.
Jan 04 17:10:43 test.example.com systemd[1]: Failed to start test Puma HTTP Server.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Unit entered failed state.
Jan 04 17:10:43 test.example.com systemd[1]: test-puma.service: Failed with result 'exit-code'.
What is wrong with this script?
可能只是服务类型:
Main PID: 3239 (code=exited, status=0/SUCCESS)
似乎主进程正在分叉。尝试 forking
而不是 simple
:https://www.freedesktop.org/software/systemd/man/systemd.service.html#Options
解决方法如下:
[Unit]
Description=Test Puma HTTP Server
After=network.target
[Service]
Type=simple
User=rails
WorkingDirectory=/var/www/test-optimum/current
ExecStart=/bin/bash -lc 'RAILS_ENV=production bundle exec puma -C /var/www/test-optimum/current/config/puma.rb'
ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop
PIDFile=/var/www/test-optimum/shared/tmp/pids/puma.pid
Restart=always
[Install]
WantedBy=multi-user.target
在我的例子中,我在 ExecStart
中有错误的命令,更新为这样的东西就成功了 ExecStart=/bin/bash -lc 'RAILS_ENV=production bundle exec puma -C /home/ubuntu/rails_current_server/config/puma.rb'
改进的解决方案可以是:
[Unit]
Description=Test Puma HTTP Server
After=network.target
[Service]
Type=simple
User=rails
WorkingDirectory=/var/www/test-optimum/current
ExecStart=/home/rails/.rvm/bin/rvm default do bundle exec puma -C /var/www/test-optimum/current/config/puma.rb --daemon
ExecStop=/home/rails/.rvm/bin/rvm default do bundle exec pumactl -S /var/www/test-optimum/shared/tmp/pids/puma.pid stop
PIDFile=/var/www/test-optimum/shared/tmp/pids/puma.pid
Restart=always
[Install]
WantedBy=multi-user.target