在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上运行。

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

/home/epic/pwd.sh:

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

ExecStartPre=/home/epic/pwd.sh

另外你可能想要阅读rvm的包装,看看是否比直接从rvm安装path调用rake好, http: //deepakprasanna.blogspot.com/2011/06/rvm-wrappers.html