Jak dodać skrypt do uruchamiania i zamykania systemu w Debianie?

12

tytuł właściwie podsumowuje.

jak dodać plik startup.sh i shutdown.sh mojej aplikacji serwera do sekwencji uruchamiania i zamykania systemu operacyjnego Debian?

Amir Arad
źródło

Odpowiedzi:

15

W Debianie należy umieścić skrypty uruchamiania i zamykania aplikacji i usług /etc/init.d/.

Debian udostępnia przykładowy skrypt /etc/init.d/skeleton, który możesz zmodyfikować według własnych upodobań.

Gdy jest na miejscu, zadzwoń:

# update-rc.d YOURAPP defaults

Aby Debian dodał /etc/rc?.d/dla ciebie dowiązania symboliczne.

Jeśli wolisz menu lub interfejs graficzny, spójrz na pakiet sysv-rc-conflub ksysv.

MikeyB
źródło
4

Możesz wywołać swój skrypt z /etc/rc.local , przed wierszem z informacją o wyjściu 0

Jeśli chodzi o zamykanie aplikacji, sugerowałbym umieszczenie skryptu w /etc/rc0.d . Musisz nazwać go wielką literą K , a następnie dwucyfrową liczbą, która określa kolejność uruchamiania tych skryptów, a następnie nazwę. Zostanie wywołany z parametrem „stop”, ale można to zignorować w przypadku prostego skryptu zatrzymania.

Brent
źródło
Dlaczego miałbyś faszerować się z rc.local, skoro i tak już musisz bawić się w /etc/rcX.d?
womble
rc.local jest właściwym miejscem dla prostych rzeczy startowych - nie musisz zajmować się parametrami start / stop itp. Ale nie ma możliwości zamknięcia procesu. Rc0.d to trochę hack.
Brent
3

Na początek spójrz na to .

Aby zamknąć system, utwórz link / skopiuj skrypt do jednego z folderów /etc/rcX.d, gdzie X jest poziomem uruchomieniowym, w którym chcesz go uruchomić. 0 to poziom zamknięcia systemu Debian.

squillman
źródło
Potrzebowałem informacji o wyłączeniu. Dzięki za to, @squillman.
harperville
1

Najłatwiej jest zmodyfikować istniejące skrypty, działa w moim systemie, używane do dźwięków :)

  • uruchomienie, modyfikacja /etc/init.d/rc.local, dodanie sh na końcu pliku, przed: (wykona go tuż przed „ekranem” logowania)
  • zamknij, zmodyfikuj /etc/init.d/halt, dodaj sh na początku pliku, zaraz po początkowych komentarzach (zostanie on wykonany przed właściwym poleceniem zamknięcia, które jest wywoływane przez ten plik skryptu
  • uruchom ponownie, tak samo jak zamknięcie, ale w /etc/init.d/reboot
Kurczak
źródło
1

Od Debiana Jessie stary initprogram został zastąpiony przez systemd!

Sprawdź to sam. Uruchom: ls -l /sbin/initi zobacz, na co to wskazuje. Obecnie wskazuje na systemd( /sbin/init -> /lib/systemd/systemd), nowszy i lepszy program inicjalizacyjny.


TAK WYBRANE I INNE ODPOWIEDZI TUTAJ SĄ TERAZ NIEAKTUALIZOWANE !!!


* Chociaż nadal można instalować skrypty w stary sposób za pomocą narzędzi System-V, ogólnie nie jest to dobry pomysł.

man systemd.service mówi:*

Jeśli żądana jest usługa pod określoną nazwą, ale nie znaleziono pliku konfiguracyjnego jednostki, systemd szuka skryptu inicjującego SysV o tej samej nazwie ... i dynamicznie tworzy jednostkę usługową z tego skryptu. Jest to przydatne ze względu na zgodność z SysV. Należy pamiętać, że ta kompatybilność jest dość obszerna, ale nie w 100%.


Dla nowszych systemów Debian (tj. Jessie, Stretch, Buster itp.)

To łatwiejsze niż myślisz. (-:

Oto nowa i preferowana metoda instalowania programów rozruchowych lub zamykających.

Ze systemdnajpierw chcesz utworzyć plik jednostkową . Plik jednostkowy to głównie deklaracje, a nie kod.

Następnie użyjesz systemctlpolecenia, aby włączyć lub uruchomić tę jednostkę.

systemdwykonuje dla ciebie większość pracy, ułatwiając na przykład automatyczne uruchamianie krytycznego programu, jeśli ulegnie awarii lub zostanie zabity w inny sposób. Również zamyka twój program gdzie i kiedy powinien domyślnie, bez dodatkowej pracy z twojej strony.


Zacznij uczyć się systemdtutaj:

Z Debiana i gdzie indziej i itp i itd .


Strony podręcznika na początek:

man systemd.unit - Informacje o plikach jednostek ogólnie
man systemd.service - Informacje o plikach jednostek serwisowych, np. Demony i programy uruchamiane pojedynczo.

man systemctl - Interfejs użytkownika wiersza poleceń
man journalctl- Zobacz dziennik tego, co zrobił systemd

man systemd - O samym programie init


Istnieje również wiele innych rodzajów plików jednostkowych, np

man systemd.target - dla grup i wspólnych zsynchronizowanych celów.

Po zapoznaniu się z powyższymi informacjami podstawowymi, zacznij od, man -k systemdaby znaleźć inne powiązane strony podręcznika man.



Cokolwiek robisz, na Debianie nie używaj żadnego z tych :

  • update-rc.d - zainstaluj i usuń linki skryptów inicjujących w stylu System-V
  • sysv-rc-conf - Konfiguracja poziomu uruchamiania dla SysV, taka jak linki skryptu inicjującego
  • runlevel - Wydrukuj poprzedni i bieżący poziom pracy SysV
  • BUM- B oot U p M anager - graficzny edytor poziomów pracy
  • systemadm- Graficzny interfejs dla systemowego menedżera systemu i usług
    (BTW, autor powiedział mi przez e-mail, że jest teraz zbyt zepsuty).


PRZYKŁAD:

Ten plik jednostki uruchamia demona NoIP.com podczas uruchamiania i wyłącza go po wyłączeniu.

Ten demon, od czasu do czasu, wysyła mój aktualny adres IP zaktualizować DDNS ( D ynamic DNS ( D omain N ame S erwerze)) bazę danych, w ten sposób utrzymując moja domena wskazując na moim komputerze, gdziekolwiek ona podróżuje do.

Pliki tego urządzenia znajdują się w moim systemie w tym pliku ustawień: /etc/systemd/system/noip2.service

Oto, co znajduje się w pliku jednostki:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Ręcznie uruchom plik jednostki (np. W celu przetestowania):

  • zacznij od $ sudo systemctl start noip2.
  • uruchom ponownie za pomocą $ sudo systemctl restart noip2.
  • przestań z $ sudo systemctl stop noip2.

Skonfiguruj system, aby automatycznie uruchamiał plik jednostki podczas uruchamiania lub zamykania:

  • zacznij używać z $ sudo systemctl enable noip2.
  • koniec używania z $ sudo systemctl disable noip2.

Wyświetl dziennik

  • $ sudo journalctl -u noip2
Widok eliptyczny
źródło