Итак, я пытаюсь настроить некоторые фоновые процессы приложений для запуска при загрузке с помощью 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.
Как я могу узнать, что идет не так! Я попытался выполнить команду в оболочке, и она работает (если она была в правильном каталоге). Сервер работает на Fedora 15.
systemd не поддерживает произвольные команды оболочки с помощью Exec*
операторы, поэтому перенаправление, которое вы пытаетесь, не сработает. Вы можете написать быстрый сценарий и назвать это:
/home/epic/pwd.sh:
#!/bin/sh
/bin/pwd > /home/epic/test.sys
ExecStartPre=/home/epic/pwd.sh
Также вы можете почитать об обертках rvm, чтобы узнать, будет ли это лучше, чем вызов rake непосредственно из пути установки rvm, http://deepakprasanna.blogspot.com/2011/06/rvm-wrappers.html