Jak uruchomić skrypt powłoki przy starcie

Na instancji amazon linux, mam dwa skrypty o nazwie start_my_app i stop_my_app które uruchamiają i zatrzymują forever (który z kolei uruchamia mój węzeł.aplikacja js). Używam tych skryptów do ręcznego uruchamiania i zatrzymywania aplikacji węzła. Jak na razie dobrze.

Mój problem: chcę również skonfigurować go tak, aby start_my_app był uruchamiany zawsze, gdy system się uruchomi. Wiem, że muszę dodać plik wewnątrz init.d i wiem, jak dowiązać go symbolicznie do odpowiedniego katalogu w rc.d, ale nie wiem, co właściwie musi wejść do pliku, który umieszczam w init.d. Myślę, że to powinna być tylko jedna linijka, start_my_app, ale to nie działa dla mnie.

Author: masterxilo, 2012-10-19

15 answers

W pliku, który umieścisz /etc/init.d/ Musisz ustawić go jako wykonywalny za pomocą:

chmod +x /etc/init.d/start_my_app

Dzięki @meetamit, jeśli to nie działa, musisz utworzyć dowiązanie symboliczne do /etc/rc.d/

ln -s /etc/init.d/start_my_app /etc/rc.d/

Zwróć uwagę, że w najnowszym Debianie nie będzie to działać, ponieważ twój skrypt musi być zgodny z LSB (podaj przynajmniej następujące akcje: start, stop, restart, force-reload i status): https://wiki.debian.org/LSBInitScripts

Jako notatkę należy podać ścieżkę bezwzględną skryptu zamiast względnej, może rozwiązać nieoczekiwane problemy:

/var/myscripts/start_my_app

I nie zapomnij dodać na górze tego pliku:

#!/bin/sh
 243
Author: Jonathan Muller,
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-19 08:49:47

Ustaw crontab dla tego

#crontab -e
@reboot  /home/user/test.sh

Po każdym uruchomieniu uruchomi skrypt testowy.

 205
Author: Hemant kumar,
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 05:12:44

Proste podejście polega na dodaniu linii w /etc/rc.local:

/PATH/TO/MY_APP &

Lub jeśli chcesz uruchomić polecenie jako root:

su - USER_FOOBAR -c /PATH/TO/MY_APP &

(końcówka ampersand tła proces i pozwala na rc.local to continue executing)

Jeśli chcesz mieć pełny skrypt init, Dystrybucja Debiana ma plik szablonu, więc:

cp /etc/init.d/skeleton /etc/init.d/your_app

I dostosować go trochę.

 114
Author: Gilles Quenot,
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-08-30 13:57:24

Tak to robiÄ™ na systemach red-hat

Umieść swój skrypt w /etc/init.d, należący do roota i wykonywalny. Na górze skryptu możesz podać dyrektywę dla chkconfig. Przykład: poniższy skrypt służy do uruchomienia aplikacji java jako użytkownika oracle.

Nazwa skryptu to /etc/init.d/apex

#!/bin/bash
# chkconfig: 345 99 10
# description: auto start apex listener
#
case "$1" in
 'start')
   su - oracle -c "cd /opt/apex ; java -jar apex.war > logs/apex.log 2>logs/apex_error.log &";;
 'stop')
   echo "put something to shutdown or kill the process here";;
esac

To mówi, że skrypt musi działać na poziomach 3, 4 i 5, a priorytet dla start/stop to 99 i 10.

Następnie, jako użytkownik root możesz użyć chkconfig, aby włączyć lub wyłączyć skrypt przy starcie,

chkconfig --list apex
chkconfig --add apex

I możesz użyć usługi start / stop apex

 28
Author: Saule,
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-10-20 20:59:42

InnÄ… opcjÄ… jest posiadanie polecenia @ reboot w crontabie.

Nie każda wersja cron obsługuje to, ale jeśli twoja instancja jest oparta na Amazon Linux AMI, to będzie działać.

 10
Author: chris,
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-11-10 19:07:06

Wystarczy dodać wiersz do crontab..

Upewnij się, że plik jest wykonywalny:

chmod +x /path_to_you_file/your_file

Aby edytować plik crontab:

crontab -e

Wiersz, który musisz dodać:

@reboot  /path_to_you_file/your_file
To proste!
 8
Author: Luciano Ghilarducci,
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-11-10 14:07:22

Wpisz cron używając sudo:

sudo crontab -e

Dodaj polecenie do uruchomienia po uruchomieniu, w tym przypadku skrypt:

@reboot sh /home/user/test.sh

Zapisz:

naciśnij ESC, a następnie :x, aby zapisać i zakończyć, lub naciśnij ESC, a następnie ZZ (to shift+zz)

Test Test :

  1. Uruchom skrypt testowy bez crona, aby upewnić się, że faktycznie działa.

  2. Upewnij się, że zapisałeś polecenie w cron, użyj sudo crontab -e

  3. Reboot the serwer, aby potwierdzić to wszystko działa sudo @reboot

 6
Author: user3140639,
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-03-06 16:49:12

Możesz to zrobić:

chmod +x PATH_TO_YOUR_SCRIPT/start_my_app 

Następnie użyj tego polecenia

update-rc.d start_my_app defaults 100

Zobacz tÄ™ stronÄ™ na Cyberciti .

 4
Author: IR PRO,
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-01-05 08:54:12

Utwórz własny / init wykonywalny

To nie jest to, czego chcesz, ale to jest zabawa!

Po prostu wybierz dowolny plik wykonywalny, nawet skrypt powłoki i uruchom jądro z parametrem linii poleceń:

init=/path/to/myinit

Pod koniec rozruchu, jądro Linuksa uruchamia pierwszy plik wykonywalny w przestrzeni użytkownika na podanej ścieżce.

Kilka projektów dostarcza popularne init Pliki Wykonywalne używane przez duże dystrybucje, np. systemd, a w większości dystrybucji init będzie rozwidlał kilka procesów stosowanych w normalnej pracy systemu.

Ale możemy przechwycić /init aby uruchomić własne Minimalne skrypty, aby lepiej zrozumieć nasz system.

Oto minimalna powtarzalna konfiguracja: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/f96d4d55c9caa7c0862991025e1291c48c33e3d9/README.md#custom-init

 2
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
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-10-01 18:29:47

Dla Debiana 9 Zobacz https://askubuntu.com/questions/228304/how-do-i-run-a-script-at-start-up . to mi pomogło. Krótka wersja dla Debiana 9: Dodaj polecenia (jako root) do / etc / rc.local

/path_to_file/filename.sh ||  exit 1   # Added by me
exit 0

Prawdopodobnie, /path_to_file/filename.sh powinien być wykonywalny (tak mi się wydaje).

 1
Author: Mikhail Ionkin,
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-04-13 12:22:42

Absolutną najprostszą metodą, jeśli chcesz uruchomić prosty skrypt (lub cokolwiek), jest to, jeśli masz gui do użycia system > Preferencje, a następnie uruchom aplikacje.

Po prostu przejdź do skryptu, który chcesz i gotowe. (make script executable)

 0
Author: fieldsweeper,
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-24 03:18:05

To proste rozwiązanie działało dla mnie na instancji Amazon Linux z systemem CentOS. Edytuj swój plik /etc/rc.d/rc.local i umieść tam polecenie. W tym pliku jest napisane, że zostanie on wykonany Po wszystkich innych skryptach init. Więc bądź ostrożny w tym względzie. Tak obecnie wygląda ten plik.Tutaj wpisz opis obrazka. Ostatnia linijka to nazwa mojego scenariusza.

 0
Author: shshnk,
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-12-27 11:02:13
  • Dodaj swój skrypt do /etc / init.d / katalog
  • Zaktualizuj swoje poziomy RC: $ update-rc.d myScript.sh defaults NN gdzie NN jest kolejnoÅ›ciÄ… wykonania. 99 oznacza na przykÅ‚ad, że bÄ™dzie uruchamiany po 98 i przed 100.
 0
Author: Kibrom Gebre,
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-01-17 19:03:29

Dla niektórych to zadziała Możesz po prostu dodać następujące polecenie do System > Preferencje>aplikacje startowe:

bash /full/path/to/your/script.sh
 -6
Author: SagarSave,
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-11-27 13:59:44

Jeśli chcesz umieścić startup również możesz użyć

Przede wszystkim Przenieś swój skrypt / etc / init.d wtedy chmod 777 / etc / init.d / nazwa skryptu

Po zastosowaniu polecenia

Update-rc.d Twój skrypt domyślnie usunąć update-rc.d-f Twój skrypt Usuń

Przy starcie widać, że aplikacja będzie działać.

 -19
Author: murat maman,
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-10-29 20:28:35