在 systemd 中将 rails rake 任务设置为服务

在 systemd 中将 rails rake 任务设置为服务

因此,我尝试使用 systemd 设置一些应用程序后台进程,以便在启动时启动。它总是给我 127 个退出代码,我不确定为什么。我以为该ExecStart命令是在错误的目录中执行的。所以我添加了ExecStartPre输出当前目录,但它也没有执行。

这是我的服务文件:

[Unit]
Description=Background processes

[Service]
Type=simple
User=epic
Environment=RAILS_ENV=production
WorkingDirectory=/home/epic/application
ExecStartPre=/bin/pwd > /home/epic/test.sys
ExecStart=/usr/local/rvm/gems/ruby-1.9.3-p194/bin/rake jobs:work

当我执行时,消息日志会显示systemctl start epic.service

Apr 24 05:13:01 application systemd[1]: epic.service: main process exited, code=exited, status=127
Apr 24 05:13:01 application systemd[1]: Unit epic.service entered failed state.

我怎么知道哪里出了问题!我尝试在 shell 中执行命令,并且成功了(如果命令在正确的目录中)。服务器在 Fedora 15 上运行。

答案1

systemd 不支持使用其Exec*语句的任意 shell 命令,因此您尝试的重定向将不起作用。您可以编写一个快速脚本并调用它:

/home/epic/pwd.sh:

#!/bin/sh
/bin/pwd > /home/epic/test.sys

ExecStartPre=/home/epic/pwd.sh

另外,您可能希望阅读 rvm 包装器,看看这是否比直接从 rvm 安装路径调用 rake 更好,http://deepakprasanna.blogspot.com/2011/06/rvm-wrappers.html

相关内容