Korzystam z CentOS 7, a moim celem jest tworzenie crona co pięć sekund, ale kiedy badałem, możemy używać crona tylko przez minutę, więc teraz tworzę plik powłoki.
hit.sh
while sleep 5; do curl http://localhost/test.php; done
ale trafiłem go ręcznie, klikając go prawym przyciskiem myszy.
Chcę utworzyć usługę dla tego pliku, aby móc go uruchomić i zatrzymać automatycznie.
Znalazłem skrypt do stworzenia usługi
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
Ale nie wiem, co napisać w metodach start lub stop Próbowałem umieścić tę samą zawartość hit.sh w, start(){}
ale dało to błąd }
w metodzie in stop.
/usr/bin/myscript
działa dobrze, gdy uruchamiasz go samodzielnie? Jakie są wyniki,echo $?
kiedy skrypt zakończy działanie? Czy to 203?/usr/bin/myscript.sh
działa dobrze przy wykonywaniu przez terminal iecho$?
dał mi1
Odpowiedzi:
Jeśli chcesz ponownie użyć próbki kodu, może wyglądać mniej więcej tak:
Oczywiście skrypt, który chcesz wykonać jako usługę, powinien przejść np.
/usr/local/bin/hit.sh
Do powyższego kodu/etc/init.d/hitservice
.Dla każdego poziomu działania, który wymaga uruchomienia tej usługi, musisz utworzyć odpowiednie dowiązanie symboliczne. Na przykład nazwane dowiązanie symboliczne
/etc/init.d/rc5.d/S99hitservice
uruchomi usługę dla poziomu uruchamiania 5. Oczywiście nadal można uruchomić i zatrzymać ją ręcznie za pomocąservice hitservice start
/service hitservice stop
źródło
systemd
skryptu, dlatego nie jest potrzebny przyrostek. Powinieneś być w stanie uruchomić stare skrypty zsystemd
dobrze. Próbowałeśsystemctl enable hitservice
?Wierzę, że CentOS 7 i wyżej używa systemd. Jeśli tak jest w przypadku twojego systemu, spróbuj wykonać następujące czynności:
Umieść polecenia skryptu, w których chcesz uruchomić
/usr/bin/myscript
.Pamiętaj, aby skrypt był wykonywalny za pomocą
chmod +x
.Utwórz następujący plik:
/etc/systemd/system/my.service
Załaduj ponownie wszystkie pliki usługi systemowej:
systemctl daemon-reload
Sprawdź, czy działa, uruchamiając usługę za pomocą
systemctl start my
.Premia:
W celu przetestowania usystematyzowanej usługi można uruchomić środowisko tmux z dwoma panelami okien, w których górne okno monitoruje dane wyjściowe skryptu (
stdout
istderr
), a dolne okno może być użyte do ponownego uruchomienia usług. Wymagatmux
to instalacji, a następnie:Następnie uruchom ponownie usługę za pomocą:
Wyjdź za
tmux
pomocą,ctrl-d
a następniectrl-c
.źródło
Type=forking
. Są szanse, że pytający będzie potrzebował,Type=simple
ale generalnie rozwidlenie nie jest zalecane: 0pointer.de/public/systemd-man/… . Ludzie biorą swoje stare skrypty inicjujące i pakują jesystemd
tak, aby rozpocząć uruchamianie ich usługisystemd(init-script(service))
. Jednaksystemd
zastępuje skrypty init, więc powinieneś wywoływać usługę bezpośredniosystemd
, aby wyglądałasystemd(service)
.To jest mój skrypt jako usługa:
źródło
Spójrz na fpm. Jest to narzędzie, które stworzy dla Ciebie skrypty inicjujące. Działa na wielu platformach (systemd, upstart, ect ..)
https://github.com/jordansissel/fpm
źródło
Zobacz projekt Bash Service Manager : https://github.com/reduardo7/bash-service-manager
Przykład realizacji
Przykład użycia
źródło