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?

Author: Jurian Sluiman, 2011-10-16

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
 65
Author: John Doe,
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.

 10
Author: user3533658,
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.

 5
Author: Jurian Sluiman,
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.

 4
Author: Boyan,
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

 3
Author: w00t,
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).

 2
Author: superyuan,
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
 2
Author: Gayolomao,
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.

 1
Author: CatGuyTX,
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.

 1
Author: lppier,
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ć.

 0
Author: Asad R.,
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ć.

 0
Author: RVQ,
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
 0
Author: Heapify,
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..

 0
Author: nikhil parashar,
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...

 -1
Author: fantaxy025025,
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.

 -3
Author: Jason,
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