W /etc/rc.local
skrypcie mam jedno polecenie, które ma uruchomić demona aktualizacji Tiny Tiny RSS podczas uruchamiania, ale skrypt nie jest uruchamiany podczas uruchamiania. Czemu?
Cały plik /etc/rc.local:
#!/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.
/sbin/start-stop-daemon -b -c www-data:www-data -S -x /usr/bin/php /var/www/ttrss/update_daemon2.php -- -quiet
exit 0
/etc/rc.local
jest wykonywalny:
# ls -l /etc/rc.local
-rwxr-xr-x 1 root root 342 May 25 16:14 /etc/rc.local
/etc/init.d/rc.local
istnieje i jest wykonywalny:
# ls -l /etc/init.d/rc.local
-rwxr-xr-x 1 root root 801 Jul 27 2012 /etc/init.d/rc.local
/etc/init.d/rc.local
ma być wykonywany podczas uruchamiania dla tego poziomu pracy:
# runlevel
N 2
# ls -l /etc/rc2.d/S99rc.local
lrwxrwxrwx 1 root root 18 Sep 22 2012 /etc/rc2.d/S99rc.local -> ../init.d/rc.local
Jeśli ręcznie wywołam plik /etc/rc.local z wiersza polecenia, ładuje się demon update_daemon ...
# /etc/rc.local
# ps ax | grep update_daemon2.php
2233 ? S 0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
2234 ? S 0:00 /usr/bin/php /media/sda5/www/news/update_daemon2.php -quiet
... co muszę pamiętać za każdym razem, gdy mój serwer uruchamia się ponownie, dopóki problem nie zostanie rozwiązany.
Podobne pytania już istnieją, ale jak dotąd nie byłem w stanie zastosować informacji zawartych w moim konkretnym problemie.
Dlaczego komenda w rc.local nie jest wykonywana podczas uruchamiania?
requiretty
ustawieniem. Po zalogowaniu wykonuje się skrypt w TTY, ale podczas uruchamiania systemu nie ma go w TTY. Ten link może ci pomóc shell-tips.com/2014/09/08/… Dzięki.Odpowiedzi:
rc.local
skrypt kończy działanie, jeśli wystąpi jakikolwiek błąd podczas wykonywania któregokolwiek z jego poleceń (wspomnij o-e
flagi w#!/bin/sh -e
).Możliwe, że niektóre warunki wstępne nie są spełnione, gdy próbujesz uruchomić swoje polecenia, gdy
rc.local
wykonanie ma miejsce, więc wykonanie polecenia nie powiedzie się.Zetknąłem się z tym samym podczas ręcznego ustawiania gubernatora procesora, ale nie robiłem tego w
rc.local
. Oto moje niestandardowe obejście, któreupdate-rc.d
pozwala na uruchamianie poleceń podczas uruchamiania:myscript.sh
w katalogu/etc/init.d
z nagłówkiem:#!/bin/sh
sudo chmod +x /etc/init.d/myscript.sh
sudo update-rc.d myscript.sh defaults
Możesz także sprawdzić
/etc/network/if-up.d
skrypty i sprawdzić, czy możesz uruchamiać polecenia podczas uruchamiania sieci.źródło
update-rc.d
miałem podobny problem w rc.local, który nie uruchamiał się przy starcie
sshades dostarczyło mi następującą odpowiedź:
chociaż nie przetestowałem jego rozwiązania, myślę, że brzmi to logicznie i zadziała. Jednak :
Znalazłem również rozwiązanie, które załatwi dodanie skryptu do ./.config/autostart-scripts/
źródło
rc.local
jest wyłączone, jaka jest alternatywa?spróbuj
sudo sysv-rc-conf
i sprawdź, czyrc.local
jest włączonyźródło
sudo apt install sysv-rc-conf
rc.local
nie ma nawet na mojej liście usług!Upewnij się, że skrypt rc.local jest wykonywalny:
Następnie włącz:
Uruchom ponownie system lub uruchom skrypt ręcznie, uruchamiając:
Status usługi można wyświetlić, uruchamiając:
źródło
rc-local
usługę.Ten problem występował na niektórych serwerach hostowanych podczas ładowania reguł FW.
Na tych polach bardzo szybko się restartują i znaleźliśmy po prostu „uśpienie 1” w rc.local, zanim instrukcje load wydają się rozwiązać problem. Wydaje mi się, że dawało to trochę czasu na założenie interfejsów przed załadowaniem reguł FW.
źródło
sleep 1
rozwiązał mój problem. Ciekawe, że mam dużo serwerów, ale tylko jeden ma ten problem.Kiedyś edytowałem za
rc.local
pomocą Notatnika w systemie Windows i zaczął mieć ten problem.W takim przypadku użycie edytora tekstu obsługuje konwersję EOL, taką jak Notepad ++, w celu konwersji stylu EOL na „Unix”, może go rozwiązać.
Możesz to również zrobić
:set ff=unix
w Vimie.źródło
Znalazłem w kontenerach Ubuntu lxc, że jeśli rc.local ma idealnie poprawny shebang np
zawiedzie, ale jeśli usuniesz shebang, to zadziała.
Nie do końca rozumiem, dlaczego lub jakiej powłoki używa. Myślę, że bombarduje też pierwsze niezerowe. (W innych instalacjach Ubuntu prawidłowy shebang nie stanowi problemu)
źródło
Musisz upewnić się, że
/etc/rc.local
jest wykonywany podczas uruchamiania serwera za pomocą polecenia:sudo systemctl enable rc-local.service
źródło