Uruchom skrypt z rc.local: skrypt działa, ale nie Przy bootowaniu
Mam węzeł.skrypt js, który należy uruchomić przy starcie i uruchomić pod użytkownikiem www-data. W trakcie tworzenia zawsze zaczynałem skrypt od:
su www-data -c 'node /var/www/php-jobs/manager.js
Widziałem dokładnie, co się stało.js działa teraz świetnie. Szukając więc znalazłem, że musiałem umieścić to w moim /etc/rc.local
. Nauczyłem się też kierować wyjście do pliku dziennika i dodawać 2>&1
do "redirect stderr to stdout" i powinien to być Demon, więc ostatnim znakiem jest &
.
W końcu mój /etc/rc.local
wygląda jak to:
#!/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.
su www-data -c 'node /var/www/php-jobs/manager.js >> /var/log/php-jobs.log 2>&1 &'
exit 0
Jeśli uruchomię to sam (sudo /etc/rc.local
): tak, to działa! Jednak, jeśli wykonam restart No node
Proces jest uruchomiony, /var/log/php-jobs.log
nie istnieje, a więc menedżer.js nie działa. Co się dzieje?
15 answers
W tym przykładzie rc.skrypt lokalny używam przekierowania io w pierwszej linii wykonania do własnego pliku dziennika:
#!/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.
exec 2> /tmp/rc.local.log # send stderr from rc.local to a log file
exec 1>&2 # send stdout to the same log file
set -x # tell sh to display commands before execution
/opt/stuff/somefancy.error.script.sh
exit 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 18:27:36
Na niektórych Linuksach (np. Centos & RH), /etc/rc.local
jest początkowo tylko dowiązaniem symbolicznym do /etc/rc.d/rc.local
. W tych systemach, jeśli dowiązanie symboliczne jest uszkodzone, a /etc/rc.local
jest oddzielnym plikiem, zmiany na /etc/rc.local
nie będą widoczne podczas rozruchu -- proces rozruchowy uruchomi wersję w /etc/rc.d
. (Będą działać, jeśli ktoś uruchomi /etc/rc.local
ręcznie, ale nie będzie uruchamiany przy bootupie.)
Brzmi jak w systemie dimadimy, są to osobne pliki, ale /etc/rc.d/rc.local
wywołania /etc/rc.local
Dowiązanie symboliczne z /etc/rc.local
do 'prawdziwego' jeden z /etc/rc.d
może się zgubić, jeśli przeniesie się rc.local
do katalogu kopii zapasowej i skopiuje go z powrotem lub utworzy od zera, nie zdając sobie sprawy, że oryginalny w /etc
był tylko dowiązaniem symbolicznym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-14 21:22:15
Skończyłem z upstart , który działa dobrze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 19:05:52
W Ubuntu zauważyłem, że są 2 pliki. Prawdziwy jest /etc/init.d/rc.local
; wydaje się, że drugi {[1] } jest fałszywy?
Kiedy zmodyfikowałem poprawny (/etc/init.d/rc.local
), wykonałem go zgodnie z oczekiwaniami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-02 22:56:16
Możesz również sprawić, że zadziała, podając pełną ścieżkę do węzła. Ponadto, jeśli chcesz uruchomić polecenie powłoki jako demona, powinieneś zamknąć stdin dodając 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-16 14:08:52
Jeśli używasz Linuksa w chmurze, zazwyczaj nie masz szansy dotknąć prawdziwego sprzętu za pomocą rąk. więc nie widzisz interfejsu konfiguracyjnego podczas uruchamiania po raz pierwszy i oczywiście nie możesz go skonfigurować. W rezultacie usługa firstboot
będzie zawsze na drodze do rc.local
. Rozwiązaniem jest wyłączenie firstboot
wykonując:
sudo chkconfig firstboot off
Jeśli nie jesteś pewien, dlaczego Twój rc.local
nie działa, zawsze możesz sprawdzić z pliku /etc/rc.d/rc
, ponieważ ten plik zawsze uruchomi się i wywoła inne podsystemy (np. rc.miejscowe).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-08 14:13:19
Miałem ten sam problem (na CentOS 7) i naprawiłem go dając uprawnienia execute do/etc / local:
chmod +x /etc/rc.local
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-25 09:58:30
Uruchomiłem skrypt edytując {[1] } i wydając następujące 3 polecenia.
sudo mv /filename /etc/init.d/
sudo chmod +x /etc/init.d/filename
sudo update-rc.d filename defaults
Teraz skrypt działa przy rozruchu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 06:26:40
Używam CentOS 7.
$ cd /etc/profile.d
$ vim yourstuffs.sh
Wpisz w yourstuffs.sh scenariusz.
Wpisz co chcesz tutaj wykonać
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH
Zapisz i uruchom ponownie system operacyjny.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-29 03:09:22
Jest to najprawdopodobniej spowodowane brakującą lub niekompletną zmienną środowiskową PATH.
Jeśli podasz pełne ścieżki absolutne do plików wykonywalnych (su i node), będzie to działać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-22 05:42:29
Rozumiem, że jeśli umieścisz skrypt na określonym poziomie uruchamiania, powinieneś użyć ln-s, aby połączyć skrypt z poziomem, na którym ma działać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 18:09:51
Użyłem rc.lokalne w przeszłości. Ale nauczyłem się z mojego doświadczenia, że najbardziej niezawodnym sposobem uruchomienia skryptu podczas rozruchu systemu jest użycie polecenia @reboot w crontabie. Na przykład:
@reboot path_to_the_start_up_script.sh
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-12 23:59:36
Najpierw Utwórz skrypt wykonywalny za pomocą
sudo chmod 755 /path/of/the/file.sh
teraz dodaj skrypt w rc.lokalne
sh /path/of/the/file.sh
przed wyjściem 0
w rc.lokalne,
następnie zrób rc.local to executable with
sudo chmod 755 /etc/rc.local
następnie zainicjuj RC.użycie lokalne
sudo /etc/init.d/rc.local start
to uruchomi rc.lokalne
teraz zrestartuj system.
Załatwione..
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 11:02:38
1 nie zaleca się używania roota do uruchamiania aplikacji takich jak node app.
Możesz to zrobić, ale możesz złapać więcej WYJĄTKÓW.2 rc.local normalnie działa jako użytkownik root.
Więc jeśli twój skrypt powinien działać jako inny użytkownik, taki jak www u powinien upewnić się, że ścieżka i inne środowisko jest w porządku.
3 znajduję łatwy sposób na uruchomienie usługi jako użytkownik:
Sudo-u www-i / The / path/of / your / script
Proszę wybrać podręcznik sudo~ - i [polecenie] Opcja-i (simulate initial login) uruchamia powłokę określoną przez wpis w bazie danych hasła użytkownika docelowego jako skorupę loginshell...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-29 08:57:07
rc.local
działa tylko przy starcie. Jeśli ponownie uruchomisz skrypt i chcesz go uruchomić, musi on wejść do pliku rc.0
zaczynającego się od prefiksu K99.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-22 21:37:13