У меня есть демон, которым я бы хотел управлять. У демона есть собственный пользователь, а также собственная среда rbenv, созданная в ruby. Конфигурация супервизора для демона:
[program:hooks]
command=/home/hooks/bin/run.sh
user=hooks
environment=HOME='/home/hooks',USER=hooks,PATH='/home/hooks/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
где /home/hooks/bin/run.sh
выглядит как:
#!/bin/bash -e
rbenv init -
cd /home/carehooks/src/
bundle install
thin --timeout 0 --environment 'production' --rackup `pwd`/config.ru --chdir examples/ start
Теперь результат:
# supervisorctl start hooks
hooks: ERROR (abnormal termination)
# cat /var/log/supervisor/hooks-stderr---supervisor-e2Myrz.log
/bin/readlink: missing operand
Try `/bin/readlink --help' for more information.
/home/hooks/bin/run.sh: line 6: bundle: command not found
# cat /var/log/supervisor/hooks-stdout---supervisor-ndpvIv.log
export PATH="/home/hooks/.rbenv/shims:${PATH}"
source "/home/hooks/.rbenv/libexec/../completions/rbenv.bash"
rbenv rehash 2>/dev/null
function rbenv() {
command="$1"
if [ "$#" -gt 0 ]; then
shift
fi
case "$command" in
shell)
eval `rbenv "sh-$command" "$@"`;;
*)
command rbenv "$command" "$@";;
esac
}
Это моя конфигурация супервизора или rbenv? Как я могу заставить их сосуществовать?
rbenv создает прокладки для всех команд (например, ruby, bundle, ...). Эти прокладки находятся в одном каталоге (по умолчанию ~ / .rbenv / shims). Поэтому вы можете позвонить home/my_user/.rbenv/shims/command
с параметрами для использования версии команды, определенной rbenv.
В приложении мой conf для образца программы.
[program:sample_program]
directory=/home/my_user/sample_dir
command=/home/my_user/.rbenv/shims/ruby server.rb
user=my_user
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/sample_program.out