【问题标题】:reboot script to start rails server重启脚本以启动 Rails 服务器
【发布时间】:2021-03-24 04:55:16
【问题描述】:

我的 Rails 服务器在部署者用户下运行,我通常这样启动它

#restart.sh
#!/bin/bash
sudo -u deployer -H bash -l
cd /var/www/html/cms/
./server -e staging start

所以当我通过 SSH 登录时,我运行 ./restart.sh 并且效果很好。

我试图在重新启动后自动执行此操作,因此我在其中添加了 reboot_site.service /etc/systemd/system/reboot_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_site.service 启用该服务

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

sudo -u deployer -H bash -l

服务器是一个 AWS EC2 AIM 实例 我的配置有什么问题无法完成这项工作,我该如何解决?

【问题讨论】:

    标签: ruby-on-rails amazon-ec2 reboot


    【解决方案1】:

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

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

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

    【讨论】:

    • @PeterVandePut 没问题。如果可行,我们将不胜感激。
    • 它可以在一台服务器上运行,但在另一台具有相同设置的服务器上运行用户:非root用户可能无法使用
    • @PeterVandePut 你的第二台服务器有不同的配置,不能相同,否则它会工作。究竟有什么区别?
    【解决方案2】:

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

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

    【讨论】:

    • 这是使用 bash 脚本和 crontab 重新启动 rails 服务器的最佳答案。非常感谢。
    猜你喜欢
    • 2022-01-20
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多