Oto moja /etc/rc.local
jak dotąd:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/path/to/script.sh &
exit 0
I to wszystko.
Problemem jest script.sh
działa dwa razy przy starcie, zgodnie z jego plikiem dziennika. Pierwszy bieg przebiega tak, jak powinien, ale drugi wypuszcza kilka komunikatów o błędach z powodu rzeczy już rozpoczętych itp. Jeśli uruchomię skrypt ręcznie, to tylko raz, więc jestem pewien, że nie zapętla się wewnętrznie.
Jeśli się zmienię /etc/rc.local
do tego:
date >> /path/to/Debug.txt
runlevel >> /path/to/Debug.txt
#/path/to/script.sh &
potem to rozumiem Debug.txt
po jednym ponownym uruchomieniu:
Fri Jan 6 15:56:42 CST 2017
N 2
Fri Jan 6 15:58:38 CST 2017
N 2
This script is executed at the end of each multiuser runlevel
. Jaki jest wynikrunlevel
dowództwo?Odpowiedzi:
Najlepszym rozwiązaniem jest sprawdzenie, dlaczego Twój skrypt jest dwukrotnie wywoływany. Czy rc.local jest wywoływany dwukrotnie lub czy Twój skrypt jest uruchamiany z innej lokalizacji? Możesz spróbować dodać trochę logowania do rc.local, aby sprawdzić, czy w rzeczywistości jest to coś, co jest wywoływane dwukrotnie. Na przykład,
Jeśli nie możesz wyśledzić, dlaczego skrypt jest uruchamiany dwukrotnie, drugą opcją jest utworzenie pliku blokady dla skryptu. Powinno to iść do systemu plików tmpfs, aby zniknął po restarcie. Dodaj coś takiego na początku skryptu.
W ten sposób, jeśli
/var/run/script.sh.pid
istnieje, skrypt kończy działanie. W przeciwnym razie tworzy go i kontynuuje jego uruchamianie. To rozwiązanie podlega wyścigom, ale może wystarczyć do obejścia problemu.źródło