Ruby on rails 重新启动脚本以启动rails服务器

Ruby on rails 重新启动脚本以启动rails服务器,ruby-on-rails,amazon-ec2,reboot,Ruby On Rails,Amazon Ec2,Reboot,我的rails服务器是在deployer用户下运行的,我通常是这样启动它的 #restart.sh #!/bin/bash sudo -u deployer -H bash -l cd /var/www/html/cms/ ./server -e staging start 因此,当我通过SSH登录时,我会运行./restart.sh,这非常有效 我正在尝试在重新启动后自动执行此操作,因此我在中添加了reboot\u site.service /etc/systemd/system/reboo

我的rails服务器是在deployer用户下运行的,我通常是这样启动它的

#restart.sh
#!/bin/bash
sudo -u deployer -H bash -l
cd /var/www/html/cms/
./server -e staging start
因此,当我通过SSH登录时,我会运行./restart.sh,这非常有效

我正在尝试在重新启动后自动执行此操作,因此我在中添加了reboot\u site.service /etc/systemd/system/reboot\u site.service

# /etc/systemd/system/reboot_site.service

[Unit]
Description=reboot_site
After=syslog.target network.target


[Service]
Type=simple
WorkingDirectory=/var/www/html/cms
# If you use rbenv:
# ExecStart=/bin/bash -lc '/home/deploy/.rbenv/shims/bundle exec sidekiq -e production'
# If you use the system's ruby:
ExecStart=/home/ec2-user/restart.sh

[Install]
WantedBy=multi-user.target

使用sudo systemctl enable reboot\u site.service启用该服务

# /etc/systemd/system/reboot_site.service

[Unit]
Description=reboot_site
After=syslog.target network.target


[Service]
Type=simple
WorkingDirectory=/var/www/html/cms
# If you use rbenv:
# ExecStart=/bin/bash -lc '/home/deploy/.rbenv/shims/bundle exec sidekiq -e production'
# If you use the system's ruby:
ExecStart=/home/ec2-user/restart.sh

[Install]
WantedBy=multi-user.target

但是,当我现在重新启动服务器时,脚本会在以下行之后停止执行

sudo -u deployer -H bash -l
服务器是AWS EC2 AIM实例
我的配置有什么问题吗?如何解决这个问题?

如果您只需要在启动时运行脚本,您可以为此配置crontab

#crontab-e
@reboot/home/ec2 user/restart.sh

它在
sudo-u deployer-H bash-l
上停止,因为您的脚本只是更改了用户,在您以该用户身份注销之前不会继续。因此,脚本中的其余命令不会执行

我建议使用
runuser
的以下版本:

#!/bin/bash
runuser -l deployer -c 'cd /var/www/html/cms/ && ./server -e staging start'

谢谢工作perfect@PeterVandePut没问题。如果它能工作,请接受答案。它在一台服务器上工作,但在另一台具有相同设置的服务器上工作。获取错误runuser:可能不被非root用户使用users@PeterVandePut您的第二台服务器具有不同的配置,它不能相同,否则将正常工作。到底有什么区别?