Chcę wykonać skrypt przy każdym uruchomieniu mojego serwera. Problem polega na tym, że muszę być pewnym użytkownikiem, aby wykonać skrypt, jeśli spróbuję to zrobić jako root, nie mogę znaleźć niektórych pakietów (takich jak Ruby).
Próbuję zmienić na xxx user01.
sudo su user01
/etc/init.d/script start
To jednak nie działa.
ubuntu
startup-scripts
rc.local
Philip
źródło
źródło
su
w skrypcie rc?Odpowiedzi:
Uruchomienie
sudo su user01
w skrypcie nie oznacza, że następujące polecenia są wysyłane do wynikowej powłoki. W rzeczywistości prawdopodobnie oznacza to, że nowa powłoka jest spawnowana jako użytkownik01, która nigdy nie wychodzi!Dwie rzeczy:
-c 'command...'
argument do su, npsu user01 -c '/etc/init.d/script start'
.chkconfig
lubupdate-rc.d
. Nie chcesz także zadań w /etc/init.d, które nie powinny być uruchamiane jakoroot
. Same zadania mogą swobodnie przejść do innego konta użytkownika, ale należy je wywołać przez root.źródło
Możesz coś włożyć
/etc/crontab
i uruchomić@reboot
źródło
Możesz po prostu uruchomić polecenie poprzez sudo w następujący sposób:
-H ustawia zmienną środowiskową HOME na zmienną użytkownika
-u określa nazwę użytkownika do uruchomienia jako
źródło
Na pewno nie można uruchomić tego skryptu z sudo ze względu na wymaganie (wymusza, że użytkownicy muszą być zalogowani) w sudoers. Możesz chcieć wyłączyć, co jest nieco ryzykowne
Istnieje również nieco stare narzędzie o nazwie runsuid: http://freecode.com/projects/runsuid
HTH
źródło