如果我从终端运行此命令,它工作正常:
bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb
但如果我将其放入ExecStart
systemd 服务单元文件中:
[Unit]
Description=Puma Application HTTP Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/www/html/mysite
ExecStart=bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
我会收到错误:
可执行路径不是绝对的:bundle exec /home/ubuntu/.rbenv/sh
我认为它抱怨命令必须以绝对路径而不是“bundle exec”开头。所以我尝试这个:
ExecStart=/bin/bash -lc 'bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb'
现在,当我运行 systemctl daemon-reload 和 systemctl start puma-mysite 时,出现以下错误:
Jan 03 00:07:53 ip-10-0-1-133 systemd[1]: puma-mysite.service: 启动请求重复得太快。
Jan 03 00:07:53 ip-10-0-1-133 systemd[1]: puma-mysite.service: 失败,结果为“退出代码”。
Jan 03 00:07:53 ip-10-0-1-133 systemd[1]:无法启动 Puma 应用程序 HTTP 服务器。
这似乎是 SystemD 的问题,因为该命令在 SystemD 之外工作。
答案1
我也通过给bundle命令一个绝对路径来让它工作:
ExecStart=/home/ubuntu/.rbenv/shims/bundle exec /home/ubuntu/.rbenv/shims/puma -C /var/www/html/mysite/config/puma.rb
答案2
我在研究类似问题的解决方案时发现了这一点。
另一个论坛建议将此作为解决方案。
[Service]
ExecStartPre=-/bin/sleep 5
EnvironmentFile=/etc/default/bind9
https://askubuntu.com/questions/711535/delay-startup-service https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
还
这里提供的解决方案包括
ExecStartPost=/bin/sleep 30
和
[Timer]
OnActiveSec=5sec
AccuracySec=1s
[Install]
WantedBy=timers.target
https://askubuntu.com/questions/1144764/sleep-not-working-in-service
[service]
TimeoutSec=infinity