【问题标题】:systemd init script for resque workerresque worker 的 systemd 初始化脚本
【发布时间】:2017-05-17 13:58:11
【问题描述】:

我拥有一个在 Ubuntu 16.04 服务器上运行的 nginx 网络服务器。 现在我正在尝试为 Rails 应用程序的 resque worker 和调度程序构建一个 init 脚本。

我在“/etc/systemd/system/”中创建了一个文件 resque-worker.service,它看起来像这样:

[Unit]
 Description=resque-worker for pageflow

[Service]
 Type=forking
 ExecStart=/home/pageflow/pageflow_daad/rake resque:scheduler QUEUE=* RAILS_ENV=production > /home/pageflow/pageflow_daad/log/resqueschedule.log &

[Install]
 WantedBy=multi-user.target

由于某种原因,在执行“systemctl daemon-reload”和“systemctl start name.service”后我得到这个错误:

$ systemctl status resque-worker.service
● resque-worker.service - resque-worker for pageflow
   Loaded: loaded (/etc/systemd/system/resque-worker.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2017-05-17 15:52:38 CEST; 15s ago
  Process: 28096 ExecStart=/home/pageflow/pageflow_daad/rake resque:scheduler QUEUE=* RAILS_ENV=production > /home/pageflow/pageflow_daad/log/resqueschedule.log & (code=exited, status=203/EXEC)

May 17 15:52:38 ostheim systemd[1]: Starting resque-worker for pageflow...
May 17 15:52:38 ostheim systemd[1]: resque-worker.service: Control process exited, code=exited status=203
May 17 15:52:38 ostheim systemd[1]: Failed to start resque-worker for pageflow.
May 17 15:52:38 ostheim systemd[1]: resque-worker.service: Unit entered failed state.
May 17 15:52:38 ostheim systemd[1]: resque-worker.service: Failed with result 'exit-code'.

在这种情况下,我将 Rails 应用程序的根路径用于“/home/pageflow/pageflow_daad/rake”。

在我尝试 rake 二进制文件的路径之前,我得到了错误:May 17 15:30:26 ostheim rake[26846]: rake aborted! May 17 15:30:26 ostheim rake[26846]: ArgumentError: couldn't find HOME environment -- expanding~'`

希望有这方面经验的人能帮帮我。

在此先致谢并致以最诚挚的问候, 罗纳德

【问题讨论】:

    标签: ruby-on-rails ruby nginx systemd


    【解决方案1】:

    我认为 systemd 单元内有两种类型的错误。以下是一些建议:

    1) 让 systemd 捕获您的应用程序日志,然后使用 journalctl 查看它

    journalctl -u resque-worker.service
    

    2) 使用 env systemd 方式:

    [Unit]
    Description=resque-worker for pageflow
    
    [Service]
    Type=forking
    ExecStart=/home/pageflow/pageflow_daad/rake resque:scheduler
    Environement=QUEUE=*
    Enrironement=RAILS_ENV=production
    
    [Install]
    WantedBy=multi-user.target
    

    那么,

    systemctl daemon-reload
    systemctl restart resque-worker.service
    

    【讨论】:

    • 您好,感谢您的建议。我按照您告诉我的方式更改了 systemd 单元,但仍然出现相同的错误。 journalctl -u resque-worker.service 只是给了我 code=exited status=203 就是这样。还有什么想法吗?提前致谢
    • 我不是 rake 专家,但我认为您需要 Type=simple 而不是 Type=forking,这是指向文档 freedesktop.org/software/systemd/man/systemd.service.html 的指针
    【解决方案2】:

    在研究了几个文档站点和文档本身之后,我找到了一种方法来运行它。如果有人觉得这有帮助,就想发布这个:

    [Unit]
    Description=resque-scheduler for pageflow
    
    [Service]
    User=yourUser
    WorkingDirectory=/path/to/rails/app
    ExecStart=/path/to/executeable/rake resque:scheduler &
    Environment=QUEUE=*
    Environment=RAILS_ENV=production
    
    [Install]
    WantedBy=multi-user.target
    

    有了这个脚本,一个

    systemctl daemon-reload
    

    &

    systemctl start example.service
    

    Service startet 运行起来就像一个魅力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多