Edytuję skrypt init.d. Skrypt init.d uruchamia skrypt narzędziowy, który następnie uruchamia proces. Z każdego skryptu bash, jak sprawić, by uruchomił główny proces jako określony użytkownik i grupa?
process
init
privileges
Stéphane Gimenez
źródło
źródło
Usage: su [options] [LOGIN]
isu: unrecognized option '--debug'
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
jeślisu www-data
ustawię wszystkie zmienne i uruchomię${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
, działa poprawnie. Jak to rozwiązać?su
przyjmuje pojedynczy argument, który jest poleceniem powłoki. Musisz napisaćsu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
, i upewnij się, żeMONOSERVER
iWEBAPPS
są eksportowane przez powłokę dominującego. (Uwaga: nie róbsu … -c "$MONOSERVER …"
tego, ponieważ to się nie powiedzie, jeśli dowolna zmienna zawiera znaki specjalne powłoki.) A jeśli masz dedykowany program uruchamiający demony, taki jakstart-stop-daemon
, użyj go.Jeśli
start-stop-daemon
jest dostępna w systemie powinieneś używać go i rzucić okiem na jego opcji (szczególnie-u
i-g
w tym przypadku).(W przeciwnym razie możesz użyć kombinacji
su
isg
.)Aktualizacja: Oto przykład zaczerpnięty z jakiegoś
/etc/init.d/mpd
skryptu (który używastart-stop-daemon
):Uruchom polecenie:
Wszystko, co następuje,
--
jest argumentem dla samego/usr/bin/mpd
programu. (Procedura demonizacji jest obsługiwana przez skrypt start-stop-demon, więcmpd
jest proszony, aby się tym nie przejmować--nodaemon
.)Zatrzymaj polecenie:
Jeśli
mpd
nie spadał przywileje sama, należałoby dodać (na przykład)-u mpd
,-g mpd
opcje dostart-stop-daemon
polecenia.źródło
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid