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
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
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. 
[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.