Restart daemona - skrypt bash np. do apache

Potrzebujesz pomocy z C, C++, perl, python, itp.
kefflar

Restart daemona - skrypt bash np. do apache

Post autor: kefflar »

Witajcie,

pewnie pytanie jest banalne, ale chciałbym zapytać jak w skrypcie bash poprawnie zrestartować jakąś usługę, np. apache?

Pozdrawiam
Ventrue
Junior Member
Posty: 532
Rejestracja: 06 lipca 2007, 12:10
Lokalizacja: Lubin

Post autor: Ventrue »

Kod: Zaznacz cały

/etc/init.d/apache2 restart
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Kod: Zaznacz cały

apache2ctl -h
kefflar

Post autor: kefflar »

Dziękuję za odpowiedź.
Rad
Member
Posty: 1208
Rejestracja: 28 czerwca 2006, 15:05

Post autor: Rad »

Jak jest w init.d to invoke-rc.d skrypt restart :) .
kefflar

Post autor: kefflar »

No i właśnie pojawia się problem:

Kod: Zaznacz cały

exec('/usr/bin/sudo /var/www/skrypt.sh')
Skrypt bashowy wywołany z shella restartuje apache2, ale ten sam skrypt wywołany za pomocą php na restarcie apache kończy działanie, co ciekawe w skrypcie wcześniej znajduje się restart binda, który wykonuje się bez problemu. Natomiast gdy ma się wykonać restart apache2 to w logu dostaję tylko

Kod: Zaznacz cały

hu Oct 30 12:15:37 2008] [notice] caught SIGTERM, shutting down
Co może być przyczyną?
Próbowałem:

Kod: Zaznacz cały

invoke-rc.d apache2 restart 
/etc/init.d/apache2 restart 
apache2ctl restart 
Za każdym razem apache2 się zatrzymuje. Nie mam doświadczenia w pisaniu tego typu rzeczy więc proszę o poradę.
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Skrypt bashowy wywołany z shella restartuje apache2, ale ten sam skrypt wywołany za pomocą php na restarcie apache kończy działanie
Może być tak, że jak odpalasz skrypt z shella i jesteś rootem to masz pełne prawa do wszystkich procesów i robi się restart.
Jak wywołujesz skrypt za pomocą php jest uruchamiany na innych prawach (pewnie użytkownika www) i wtedy niekoniecznie ci chce chodzić. Zapoznaj się z tematem 'bit suid' - może ci to pomóc. Jednak z rozwagą korzystaj z tego ustanawiania ''suid bit''.
kefflar

Post autor: kefflar »

Wydaje mi się że nie w tym problem:

- jak robię z shella:
1. #su www-data
2. $/usr/bin/sudo /var/www/skrypt.sh

to restart apache wykonuje się bez zająknięcia

- jak robię z php:
1. exec("/usr/bin/sudo /var/www/skrypt.sh");

to niestety apache2 się wyłącza

I w tym jest problem

Wpis w sudoers jest następujący:

Kod: Zaznacz cały

www-data ALL = (root) NOPASSWD: /var/www/skrypt.sh
I to jest dziwne bo uprawnienia są te same w obydwu przypadkach :) a przynajmniej tak mi się wydaje.
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Hmm, no nie wiem ale radzę spróbować z bitem suid, co ci zależy?
Twierdzę tak bo podobny przypadek miałem z cupsem i hplip, musiałem zrobić tak żeby użytkownik sobie sam zrestartował i dopiero nadanie bitu suid pomogło.

Kod: Zaznacz cały

chmod 4755
kefflar

Post autor: kefflar »

No to mam ciekawy przypadek, suid nie pomaga :(
Dalej apache się wyłącza.
Problem musi leżeć w czymś innym.

Ok. Na szczęście można puścić reload zamiast restarta, a to mi w zupełności wystarczy. Chociaż nie jestem do końca przekonany co do bezpieczeństwa takiego rozwiązania, nawet jeśli plik skryptu będzie tylko do odczytu. Zastanawiam się nad czymś innym. Może ktoś podrzuci mi jakiś pomysł.
ODPOWIEDZ