Ruby on rails 重新启动脚本以启动rails服务器
我的rails服务器是在deployer用户下运行的,我通常是这样启动它的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
#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您的第二台服务器具有不同的配置,它不能相同,否则将正常工作。到底有什么区别?