Debian rvm, init.d rvmsudo uruchamianie zadań jako normalny użytkownik

Na poczatek przyznam, że z administrowania jestem dupa. Na serwerze (debian) mam globalnie zainstalowany rvm. Użytkownik to colgate, ma zainstalownego przez rvm rubiego 1.8.7 ustawionego jako domyślny ruby. Po starcie systemu chciałbym uruchamiać automatycznie backgroundrb z prawami użytkownika colgate (nie roota). Napisałem skrypt w init.d (i dodałem go do rc), który w skrócie wykonuje komendę:

sudo -u colgate RAILS_ENV=production /var/www/colgate/current/script/backgroundrb start"

Niestety jeśli uruchamiam to polecenie przez sudo, to nie jest znajdowany ruby. Wygląda to na to, że nie należy mieszać sudo i rvm. Jest polecenie rvmsudo, ale z jego pomocą mogę tylko uruchomić jakieś polecenie jako root. Jako zaloguję się jako użytkownik to ładnie wszystko działa.

Jak sprawić, by po starcie startował mi backgroundrb na prawach użytkownika colgate?

[code]#!/usr/bin/env bash

case “$1” in
–trace) set -o xtrace ; shift ;;
–verbose) set -o verbose ; shift ;;
esac

prefix=“PATH=’$PATH’”

if [[ -n “${GEM_HOME:-”"}" ]] ; then
prefix=“GEM_HOME=’$GEM_HOME’ $prefix”
fi

if [[ -n “${GEM_PATH:-”"}" ]] ; then
prefix=“GEM_PATH=’$GEM_PATH’ $prefix”
fi

eval “sudo /usr/bin/env $prefix $@”

exit $?[/code]
Wygląda prosto. Albo zwiń całość do 1 komendy i podstaw reszte pod $@ z -u colgate albo dodaj opcje --user :slight_smile: i popraw eval

Z tego co widze umnie rvm != sudo rvm lub rvmsudo. Nie mogę nawet uruchomić sudo rvm bo odwołuje się do skryptu na dysku a nie do funkcji. Coś mam skopane.

Jeżeli możesz - polecam przejście na upstart zamiast init.d.

rvm ruby@gemset exec próbowałeś?

[quote=filiptepper]Jeżeli możesz - polecam przejście na upstart zamiast init.d.

rvm ruby@gemset exec próbowałeś?[/quote]
Hmm… to chyba nie zadziała.

PS. upstart jest juz stary i niemodny :wink: systemd ? http://www.freedesktop.org/wiki/Software/systemd hehe, nie ma to jak defragmentacja wszystkiego w linuksie.

Możesz też dać sudo -E (preserve env variables) -c colgate RAILS_ENV=production /var/www/colgate/current/script/backgroundrb start

rvmsudo robi to samo na piechote wybierając tylko te zmienne które są powiązane z rvm

Zadziałała wersja Filipa:

sudo -u colgate RAILS_ENV=production rvm ruby-1.8.7-p334 exec /var/www/colgate/current/script/backgroundrb start

Rozwiązanie z sudo -E nie pomogło.

Dzięki. :slight_smile:

[quote=tjeden]Rozwiązanie z sudo -E nie pomogło.

Dzięki. :)[/quote]
Bo nie miało w sumie pomóc, źle zrozumiałem pytanie.

BTW. możesz użyć też .rvmrc w /var/www/colgate/current/script/ z domyślnymi ustawieniami rvm dla tego katalogu.