因此,我尝试使用 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